精华内容
下载资源
问答
  • JavaScript 改变赋值的数组对象值不改变原数组对象
    2019-01-23 10:21:30

    https://blog.csdn.net/qq_24909089/article/details/84023581

    问题原因:

    原始值和引用值
    在 ECMAScript 中,变量可以存在两种类型的值,即原始值和引用值。

    原始值:存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。

    引用值:存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处。

    官方文档:http://www.w3school.com.cn/js/pro_js_value.asp

    案例如下:

    <script src="https://cdn.staticfile.org/jquery/2.0.0/jquery.min.js"></script>
     
        <script type="text/javascript">
            
            //定义变量
            var data_mydataD =Array();
            function Deliver() {
                       
                var data =Array();
                data['Field_1'] = 0;
                data['Field_2'] = 0;
                data['Field_3'] = 0;
                //初始值
                console.log(data);
                console.log(data_mydataD);
                if (data) {
                    data_mydataD = data;
                    DeliverC(data_mydataD);
     
                    //改变值
                    console.log(data);
                    console.log(data_mydataD);
     
                }
            }
            function DeliverC(mydataD) {
     
                mydataD['Field_1'] = -1;
                mydataD['Field_2'] = -1;
                mydataD['Field_3'] = -1;
            };
     
            Deliver();
        </script>
    运行结果:

    当我改变mydataD的传入参数时data也跟着改变了

    通过查找资料得知,对数组对象赋值是引用关系,感觉像是使用了同一内存空间,解决方法如下。

    1.方法一:

    使用jQuery.extend()方法,jQuery.extend() 函数用于将一个或多个对象的内容合并到目标对象

    官方文档:http://www.runoob.com/jquery/misc-extend.html

    2.方法二:

    使用Object.create 函数,创建一个具有指定原型且可选择性地包含指定属性的对象

    官方文档:https://msdn.microsoft.com/zh-cn/library/ff925952(v=vs.94).aspx

    代码修改如下:

    <script src="https://cdn.staticfile.org/jquery/2.0.0/jquery.min.js"></script>
     
        <script type="text/javascript">
            
            //定义变量
            var data_mydataD =Array();
            function Deliver() {
                       
                var data =Array();
                data['Field_1'] = 0;
                data['Field_2'] = 0;
                data['Field_3'] = 0;
                //初始值
                console.log(data);
                console.log(data_mydataD);
                if (data) {
     
                    //原赋值方式
                    data_mydataD = data;
     
                    //方法一:
                    data_mydataD = $.extend(true, [], data);
     
                    //方法二:
                    // data_mydataD = Object.create(data);
     
                    DeliverC(data_mydataD);
     
                    //改变值
                    console.log(data);
                    console.log(data_mydataD);
     
                }
            }
            function DeliverC(mydataD) {
     
                mydataD['Field_1'] = -1;
                mydataD['Field_2'] = -1;
                mydataD['Field_3'] = -1;
            };
     
            Deliver();
        </script>
    运行结果:

    如果想赋值对象可以改成$.extend(true, {}, data);

    运行结果如下

     


    --------------------- 
    作者:天下皆白_唯我独黑 
    来源:CSDN 
    原文:https://blog.csdn.net/qq_24909089/article/details/84023581 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    更多相关内容
  • 从原来的数组对象中抽取指定的字段生成数组对象 demo shopClassList().then(res => { //通过接口获取到数据 let testlist = res.msg //数据赋值 for (let i = 0; i < testlist.length; ...

    从原来的数组对象中抽取指定的字段生成新的数组对象

    这个是为了,下拉框的数据,所以采取了这种形式

    demo

    				 shopClassList().then(res => { //通过接口获取到数据
    					let testlist = res.msg //数据赋值
    					for (let i = 0; i < testlist.length; i++) {
    						let ob1 = {
    							label: testlist[i].cat_name,
    							value: testlist[i].cat_id
    						}
    						this.options.push(ob1)
    					}
    					console.log(this.options)
    				})

     

    附赠另一个方法:是生成数组的

    testlist.forEach(({ cat_id, cat_name }) => province_list[cat_name] = cat_id);
    
    //province_list[产品:1]

    展开全文
  • 如下所示: vm.items[indexOfItem] = newValue vue不能检测数组的变动 想要实现可以使用vue的set方法 this.$set(this.items,...2、当你修改数组的长度时,例如:vm.items.length = newLength 举个例子: var vm
  • js获取对象数组的实际长度,元素实际个数的实现代码 /*获取对象数组的长度、元素个数 *@param obj 要计算长度的元素,可以为object、array、string */ function count(obj){ var objType = typeof obj; if...
  • 有些时候,不得不想添加、修改数组对象,但是直接添加、修改后又失去了getter、setter,由于JavaScript的限制, Vue不能检测以部分变动的数组
  • * @param {*} arr 对象数组 * @param {*} key 对象单个属性 * @returns 数组 */ export const toArray = (arr, key) => { let weNeedArr = []; for (let index = 0; index < arr.length; index++) { ...

    凡是常用到的方法,我喜欢封装公用函数调取

    /**
     * 处理res数据
     * @param {*} arr 对象数组
     * @param {*} key 对象单个属性
     * @returns 数组
     */
    export const toArray = (arr, key) => {
        let weNeedArr = [];
        for (let index = 0; index < arr.length; index++) {
            const element = arr[index];
            weNeedArr.push(element[key]);
        }
        return weNeedArr;
    }
    

    Vue页面引入使用

    import {toArray} from "@/util/tool";//公共函数引入
    

    在这里插入图片描述

    res.data.data为从后台获取的对象数组, 分别获取对象数组属性“maxRate”、“minRate”、“pdate”的值,返回新的数组line1、line2、timepoint
    展开全文
  • 在web开发时,我们想操作DOM对象可以通过ID,class等属性指定DOM组件,但是小程序没这个功能,不过小程序官方也给了操作方法,接下来,我们看一下 动态操作数组 官方 changeItemInArray: function() { // you can ...
  • 想要获取 “教程” 这两个字作为标题,.vue中方法如下 {{Object.keys(sMain)[0]}} 其中的sMain是父级传下来的数组 import source from './assets/data/source.json' export default { data () { return { sHead:...
  • // 根据day来进行筛选出该数组对象中重复的最后一项 let newArr = arr.reverse().filter((item, index) => { // status来接收findIndex方法返回的下标 let status = arr.findIndex((ele) => { // 判断,...

    此时的对象数据格式是这个样子,根据day作为依据,只要拿出重复的day的最后一个对象

    下面附上代码

    // 根据day来进行筛选出该数组对象中重复的最后一项
    let newArr = arr.reverse().filter((item, index) => {
        // status来接收findIndex方法返回的下标
        let status = arr.findIndex((ele) => {
            // 判断,如果是循环一和循环二的day都相同,那么就返回这一项的下标
            return item.day === ele.day
        })
        //  最后判断如果下标和当前的index相等就返回该项
        if(index === status) {
            return item
        }
    }).reverse() // 重新翻转对象
    
    

    下面附上,上面代码的简化版,道理相同,可选择性使用,或研究

    // 上面代码段的简化版,自行选择
    let newArr = arr.reverse().filter((item, index) => index === arr.findIndex((ele) => item.day === ele.day)).reverse()
        console.log(newArr)

    如果需求相同的话,对应修改字段即可!!!

    如果对 filter()和findIndex()两个方法不懂得话,希望多多了解哦!!!

    如果符合您的需求,可以点个赞,给个鼓励,谢谢,不懂得欢迎留言!!!

    展开全文
  • 多级嵌套对象数组-根据最里层key找出它所属的每层父级
  • 小程序中获取当前data定义的,用this.data.xxx setData的时候要修改是不需要加this.data.xxx的,直接xxx, 一般直接修改data的直接修改修改数组对象...
  • 最基础的,感觉挺好用 ```javascript [ {dd:'22',AA:'张三',re1:123}, {dd:'33',AA:'李四',re1:234}, {dd:'44',AA:'我去',re1:456} ]; var arr=[]; 理想目标 arr=[ {AA:'张三',re1:123}, ... {dd:'22',AA:'张三
  • 实现代码 html <el-button @click="changeData">改变el-button> 下面是mounted this.getObjKeys() 下面是methods // 获取对象的key,并转换成数组的形式 getObjKeys() { const { objA } = this let new...
  • 有一个数组,里面装的都是对象.var array=[{"id": 52354541,"name": "比率","value": "55"},{"id": 43563123,"name": "比率","value": "88"},{"id": 32525763,"name": "比率","value": "76"}];如果是查找最大 可以...
  • status:0-表示激活 1-表示休眠 2-表示已完成 完成率rate>=100时状态不可以设置成休眠状态,但是有批量休眠的功能(接口接受一个id数组),为了不让后端小伙伴修改接口过滤数据,前端将过滤后的id数组传给后端。...
  • let arr = [{id:1, weChat:'test1'},{id:2, weChat:'test2'},{id:3, weChat:'test3'}] let newArr = []; arr.forEach((item)=>{ let obj = {}; for(let i=0; i <= arr.length; i++){ ... ne.
  • 1.对于一个数组对象,想要得到其中的特定的键值,这三篇文章可以看看(转载的,希望对大家有帮助) 1)使用:  https://blog.csdn.net/weixin_42317515/article/details/80510231#commentBox 2)提高  ...
  • js 获取数组里的对象

    万次阅读 2019-07-13 17:21:35
     {type: "update",text: "修改",state:this.GLOBAL.Btns.update},  {type: "del",text: "删除",state:this.GLOBAL.Btns.delete},  {type: "onlyLeaf",//只有叶子节点显示text: "菜单操作",state:this....
  • 开发中经常会遇到前端自己生成唯一id,然后在数组中增加删除插入对象,这样一来就要的要当前使用...数组对象如下,求id的最大和最小值 list: [ { id: 1, name: 'jack' }, { id: 2, name: 'may' }, { id: 3, name:
  • 通过它,你可以遍历对象数组的属性并进行处理。使用说明each函数根据参数的类型实现的效果不完全一致:1、遍历对象(有附加参数)$.each(Object, function(p1, p2) {this; //这里的this指向每次遍历中Object的当前...
  • 一般要用到递归,就要判断对象是否和父类型是否一样,通过本文给大家演示下简单的对象递归,还有数组递归类似。 var obj = { a:{w:1,y:2,x:3}, b:{s:4,j:5,x:6}, c:{car:7,cat:8,mao:9} } function f(s){ for(var ...
  • map()方法创建一个新数组,其结果是为每个数组元素调用一个函数。map()方法按顺序为数组中的每个元素调用一次提供的函数。 注意:map()不会为没有数组元素执行函数。 注意:map()不会更改原始数组。 ...
  • 1、创建数组 代码如下: ...//获取指定元素的 array[index] = value;//为指定元素赋值 3、添加新元素 代码如下: array.push(item1,item2……itemN);//将一个或多个元素加入数组,返回新数组的长度 array.unshift(item
  • 我有以下包含个人对象实例的人员Person []数组.我知道我可以获取Person对象的名称属性// create a new instance of PersonPerson george = new Person('george','brown','blue');// <<< make a people ...
  • 今天小编就为大家分享一篇ajax获得json对象数组 循环输出数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • // 重新组装数组 先声明一个对象 let keyMap = { } for(let i = 0;i<res.keyParts.length;i++){ // 给这个对象里添加属性 必须和需要重新组装的数组的字段对应 //后边的属性就是重新组装的数组的字段 ...
  • 前提不知道b在这个数组的下标,删除b这个元素var arrList = ['a','b','c','d']; arrList.splice(jQuery.inArray('b',arrList),1);alert(arrList);其中jQuery.inArray('b',arrList)是b这个元素在数组arrList 中的位置...
  • 1.3 读取或设置数组的长度 arr.length 获取数组的长度 arr.length=100 设置数组的长度 如果修改的length>原长度,则多出的会空出来。 如果修改的length<原长度,则多出的元素...
  • 在前后端对接中,后台会多传一些参数,在请求的时候,往往用不到所有的参数,所以需要重构集合,返回对象数组。 例如: 这里通过请求接口,原本返回的list数组对象有很多属性 通过map()遍历数组,返回新数组 ...
  • JS数组对象

    2022-01-23 19:50:11
    数组(Array),数组也是一个对象,它和普通对象功能类似,也是用来存储一些的,不同的是普通对象是使用字符串作为属性名的,而数组是使用数字来作为索引操作元素 索引:从零开始的整数就是索引;数组的存储性能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 503,191
精华内容 201,276
关键字:

数组对象修改值获取新数组