精华内容
下载资源
问答
  • 项目中有个很简单的需求...一开始用for循环给数组[0][1][2]赋值,报错undefined https://blog.csdn.net/kgojiwong/article/details/82258732 解决之后,发现页面数据为空,设置数组属性未生效。 于是掉了第二个坑 ...

    项目中有个很简单的需求,一个空数组,mounted请求到数据后添加到数组中。

    一开始用for循环给数组[0][1][2]赋值,报错undefined

    https://blog.csdn.net/kgojiwong/article/details/82258732

    解决之后,发现页面数据为空,设置数组属性未生效。

    于是掉了第二个坑

    https://www.cnblogs.com/zhuzhenwei918/p/6893496.html

    记录一下。

    转载于:https://www.cnblogs.com/xiaoyuchen/p/11061711.html

    展开全文
  • 这里是想要点击一级标题来收缩与展开二级标题,这些数据时循环一个数组得到,解决办法是这个数组的每一个对象添加一个boolean类型的属性,点击的时候如果该属性为true,则变为false,如果原来是false,则变为...

    先看下面的图:

    这里是想要点击一级标题来收缩与展开二级标题,这些数据时循环一个数组得到,解决办法是给这个数组的每一个对象中添加一个boolean类型的属性,点击的时候如果该属性为true,则变为false,如果原来是false,则变为true,通过这个属性来显示和隐藏二级内容。

    <div v-for="(oneLevel, id) in contentList" :key="id">
          <div class="one-level" @click="isShowOrHide(id)">{{id+1}}、{{oneLevel.chapterTitle}}
          </div>
          <div v-show="contentList[id].isShow" class="two-level" v-for="(item, key) in oneLevel.lstCourseVideo" :key="key">
                <div>
                  <el-button type="text" size="mini" @click="studyRecord(item)">查看</el-button>
                </div>
                </div>
          </div>
        </div>
    
    • 存储值的数组是contentList,自己添加的属性是isShow.
    • isShowOrHide(id)是点击一级标题的方法,通过该方法来改变自定义属性的值

    向数组中添加属性

    for (let i = 0; i < this.contentList.length; i++) {
            this.contentList[i] = Object.assign({}, this.contentList[i], { isShow: true });
          }
    

    isShowOrHide()方法

    let tempObj = this.contentList[id];
    this.$set(tempObj, 'isShow', !tempObj.isShow);
    this.$set(this.contentList, id, tempObj);
    

    其实这里面难住自己的是修改数组里面的值的时候视图不会刷新,后来在网上搜索一番才知道是这样解决。可以参考下面链接中的文章 Object.assign的使用vue中数组修改属性不刷新视图解决方案

    转载于:https://my.oschina.net/guowei11/blog/3089244

    展开全文
  • 我的需求是想把arr1和arr2添加到resultArr 中,并且arr2分别添加index属性为arr1的idnex值。代码如下: const arr1 = [{ id: 1, name: 'a', index: 0 }, { id: 2, name: 'b', index: 1 }]; const arr2 = [{ id: 3,...

    最近在工作中用React.js写前端,接触了很多JS的东东,在做数组嵌套循环的时候发现一个问题:

    我的需求是想把arr1和arr2添加到resultArr 中,并且给arr2分别添加index属性为arr1的idnex值。代码如下:

    const arr1 = [{ id: 1, name: 'a', index: 0 }, { id: 2, name: 'b', index: 1 }];
    const arr2 = [{ id: 3, name: 'c' }, { id: 4, name: 'd' }];
    
    const resultArr = [];
    arr1.forEach((itemA, index) => {
    	resultArr.push(itemA);
    	arr2.forEach((itemB) => {
        	const item = itemB;
        	item.index = index;
        	resultArr.push(item);
      	});
    });
    
    console.log('resultArr: ',resultArr );
        /*期望结果:
    	    0: {id: 1, name: "a", index: 0}
    	    1: {id: 3, name: "c", index: 0}
    	    2: {id: 4, name: "d", index: 0}
    	    3: {id: 2, name: "b", index: 1}
    	    4: {id: 3, name: "c", index: 1}
    	    5: {id: 4, name: "d", index: 1}
        */
        /*实际结果:
         	0: {id: 1, name: "a", index: 0}
    	    1: {id: 3, name: "c", index: 1}
    	    2: {id: 4, name: "d", index: 1}
    	    3: {id: 2, name: "b", index: 1}
    	    4: {id: 3, name: "c", index: 1}
    	    5: {id: 4, name: "d", index: 1}
        */
    

    刚开始看到这个确实比较懵逼,在网上冲浪(划水)的间隙查了一下,应该是在arr2循环中改变了arr1数组对象的属性导致的。

    改为以下代码就没有这个问题了。

    const arr1 = [{ id: 1, name: 'a', index: 0 }, { id: 2, name: 'b', index: 1 }];
    const arr2 = [{ id: 3, name: 'c' }, { id: 4, name: 'd' }];
    
    const resultArr = [];
    arr1.forEach((itemA, index) => {
    	resultArr.push(itemA);
        arr2.forEach((itemB) => {
        	const item = {
            	id: itemB.id,
            	name: itemB.name,
            	index: index
            };
            resultArr.push(item);
        });
    });
    
    console.log(resultArr);
    

    知其然,更应知其所以然(这样才有利于更好的装逼),很明显这里两个写法唯一的不同就是数组的浅拷贝和深拷贝了,那么接下来就说说js的浅拷贝和深拷贝吧!

    浅拷贝是拷贝一层,深层次的对象就拷贝其引用;深拷贝是拷贝多层,每一级别的数据都会拷贝出来;

       const obj1 = {
          a: 'hello',
          b: 18,
          c: {
            name: '如花',
            weight: 200
          }
        };
        const obj2 = Object.assign({}, obj1);
        obj2.b = 30;
        obj2.c.name = '凤姐';
    	//结果如下:
        console.log('obj1', obj1);//a:'hello',b:18,c:{name:'凤姐',weight:200}
        console.log('obj2', obj2);//a:'hello',b:30,c:{name:'凤姐',weight:200}
        
        //在copy这个对象的时候,属性a和属性b是直接copy它的值,而属性c也是一个对象,所以copy的是其引用地址
    

    常用的assign(),concat()等方法都是浅拷贝,另外需要注意以下写法:

     const obj1 = {
          a: 'hello',
          b: 18,
          c: {
            name: '如花',
            weight: 200
          }
     };
     const obj2 = obj1;
     obj2.b = 30;
     obj2.c.name = '凤姐';
     //此时是直接进行的地址引用,对obj2的修改都将影响到arr1
     console.log('obj1', obj1);//a:'hello',b:30,c:{name:'凤姐',weight:200}
     console.log('obj2', obj2);//a:'hello',b:30,c:{name:'凤姐',weight:200}
    

    那么如何实现深拷贝呢?
    最直接的办法就是挨个属性赋值:

    const obj1 = {
          a: 'hello',
          b: 18,
          c: {
            name: '如花',
          }
    };
    const obj2 = {
    	a: obj1.a,
        b: obj1.b,
        c: {
        	name: obj1.c.name,
        }
    };
    obj2.b = 30;
    obj2.c.name = '凤姐';
    
    console.log('obj1', obj1);//a:'hello',b:18,c:{name:'如花',weight:200}
    console.log('obj2', obj2);//a:'hello',b:30,c:{name:'凤姐',weight:200}
    

    此外还可以先将a对象转为json,再将json赋值给b对象,不过这两种方法总归没那么优雅,其实用ES6语法写起来倒也不算复杂。

    作为一名后端工程师,暂时就了解到这里了,最后用后端习惯的表达方式来总结一下浅拷贝和深拷贝:

    在对一个对象进行拷贝时,如果其属性是基本类型(即 Boolean,null,undefined,String 和 Number),则是进行的值拷贝,而如果其属性是Array,Function或Object,则拷贝的是其引用地址,在改变拷贝后的对象中的该属性时,会直接修改该引用所实际指向的地址的值,即会改变原对象该属性的值。

    展开全文
  • 工作中遇到一个问题就是要动态给数组对象添加或者删除某个数组,,本来想用for循环的但是这样就会有一个bug就是每次都会添加,,最后只能使用indexOF  var a =[{"name":"1111"},{"name":"222"}] console.log...

    工作中遇到一个问题就是要动态给数组是对象中添加或者删除某个数组,,本来想用for循环的但是这样就会有一个bug就是每次都会添加,,最后只能使用indexOF

       var a =[{"name":"1111"},{"name":"222"}]


    console.log(JSON.stringify(a).indexOf("11111")!=-1);


    把数组和对象全转成string, 然后使用string.indexOf判断是否存


    对象转化成数组


      objToArr: function(obj, defaultO) { //把对象转成数组  如果 default 为真  加入一个默认值
        var arr = [];
        for(var prop in obj) {
          arr.push({
            key: prop,
            val: obj[prop]
          })
        };
        if(defaultO) {
          arr.unshift({
            key: '',
            val: '请选择'
          });
        }
        return arr;
      }


    展开全文
  • 遍历一个数组,将这个数组里面的值赋值对象的某个属性,将对象添加进list,结果每个list的值都是一样的。 解决方法:在for循环外查询该对象,在for循环里面重新new一个对象,使用BeanUtils.copyProperties(old,...
  • //思路:循环便利数组中的对象每个对象添加length属性,value是键值对的数量,然后根据length,value把数组 //对象进行排序,然后循环遍历delete item.length var arr1= [ {a: 1, b: 2}, {a: 1, b: 2, c: 3...
  • 不太明白没关系等会我大家举个例子,就明白了说起来有点拗口,一看就明白了,其实如果是原生js开发,并不要这么做,就因为小程序它把一些东西绑到了视图层上了,例如:for循环,当你拿到的数据格式不对时,所以就...
  • 方法一:用 for 循环数组每个元素,拿到每个元素的个别属性保存到新对象,再把这个对象添加到新数组 方法二:用 map 循环数组每个元素,每遍历一个数组元素就返回一个对象newArray , 最后newArray就是只包含name...
  • 1.前台ps:我传递的是多个form表单里面的内容,首先循环这几个相同属性的form,把里面的内容都序列化转对象。然后添加数组里面,然后转成json字符串传递后台。后台:后台接受json字符串,通过JSONArray....
  • js是一门动态语言,而且是弱类型的,这也引来了一些不必要的麻烦,比如说数组的长度不固定,数组也可以像其他语言里的对象一样添加属性看下面的例子 var arr = [1,2,3] arr.name = '李世明' for(var i = 0 ...
  • 定义类数组

    2019-10-06 04:58:12
    在java中,可以类为基本对象来定义一个数组 ,也就是直接以一个class作为一个类型,同时里面还有属性 编写学生类,包含姓名,学号,成绩三个属性 ...分别给数组每个元素赋值,然后循环调用...
  • #页面元素对象添加一个任意属性(保留索引的属性index) #循环绑定时,i分别是0,1,2,3,也就是每个li进行事件的绑定,在绑定时,没有执行事件内部代码,只有在激活事件时才会执行,当循环结束后,i变为4(length为4),激活...
  • 首先说一下场景:我所循环的数据是对象数组,设置了一个属性当作标记,通过这个标记的值判断是否改元素添加样式 wxml: <view> <view wx:for="{{list}}" wx:key="num" class="list" > <...
  • index为当前数组对象添加属性,可以自定义名称,用来存放索引值。这样便可以使事件内部函数的索引位和for循环中i的值保持一致。 1.当for循环内部不包含事件时,i的值即为数组的索引值。 示例代码: <!DOCTYPE...
  • js对象拷贝

    千次阅读 2018-07-28 11:20:31
    1、万能的for循环实现对象的浅拷贝...对象数组类型的属性添加一个新值,父对象的该属性值也被篡改。 var obj = { name: 'FungLeo', sex: 'man', old: '18' } var obj2 = copyObj(obj) function copy...
  • 假设有表单对象属性如下: <pre><code> form: { name: { firstName: '', lastName: '', }, } </code></pre> 希望校验这两个值都不为空,则会这样写校验规则: <pre><code> ...
  • for in 也可以遍历数组,但是局限是他会把数组的其他属性键值也会遍历出,例如给数组添加一个属性arr.name = 'zhaokaikai'; for of也可以用于遍历对象但是需要 用Object.keys()将对象中key取出来 具体实现代码请...
  • 于是当我们手动Array对象添加了额外的属性后,for...in循环将会将新的属性跟之前的索引值一起循环出来。但是Array的length属性却不包括在内。 for...of循环则完全修复了这些问题,它只循环集合本身的元素。 for....
  • for in循环是js中一个比较特殊循环的案例,当我们一个对象添加新的属性的时候,这个属性就可以被枚举出来。但是有时候for in循环的执行效果可能和我们期待的不一样,尤其是在该对象上添加了原型属性的时候会导致...
  • 做项目遇到的问题,一个数组里多个对象循环动态添加address这个属性后,在控制台打印该数组或者某个对象没显示新添加的这个属性,展开三角后发现有该属性了。而且在添加属性后获取该属性值是undefined。发现对象...
  • for … in循环由于历史遗留问题,它遍历的...当我们手动Array对象添加了额外的属性后,for … in循环将带来意想不到的意外效果:var a = ['A', 'B', 'C']; a.name = 'Hello'; for (var x in a) { alert(x); // '0',
  • 用for循环遍历对象var 首先有Object.keys()的方法,拿到可迭代(遍历)的私有属性名的集合(数组)var 但如果直接用 for...in 遍历可能会出现缺陷:for in 典型的缺陷:var 正常情况:for 正常情况下我们输出的是没问题的;...
  • Python全栈(六)项目前导之7.Vue模板语法

    千次阅读 多人点赞 2020-04-03 12:20:01
    属性绑定class可以通过数组和对象两种方式实现;属性绑定style也同样。在文本中可以执行JS;...需要注意:直接修改数组中某个值不会触发视图更新,如果动态地给对象添加属性,也不会触发视图更新。
  • jsp九大内置对象

    2011-10-21 23:25:22
     使用Request对象的getCookie()方法,执行时将所有客户端传来的Cookie对象数组的形式排列,如果要取出符合需要的Cookie对象,就需要循环比较数组内每个对象的关键字。  例如:  Cookie[] c = request.get...
  • JS高级学习

    2020-01-10 13:56:39
    灵活 动态性 可以随意给对象添加属性和方法 头等函数 函数 在JavaScript是一等公民,类 在Java和C#是一等公民 执行环境 宿主环境 组成: ECMAScript -语法规范 变量、数据类型、类型转换、操作符 流程控制...
  • javascript学习日志2

    2019-08-13 19:33:09
    li,每个li添加边框 二.简单数组 双重循环数组中的应用 补充: 基本数据类型:number,string,boolean,null,undefined 引用数据类型:Object,Array,Function 对象:包含属性和方法的就是对象 学生:名字,性别,...
  • //添加属性或方法 obj.name = ‘ddd’; //删除属性 delete obj.name; //遍历(for in 循环) 数组和字符串 //相应的方法 var arr = []; 课上内容 基于对象和事件驱动的脚本语言 动态(声明时无需指定变量...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 171
精华内容 68
关键字:

循环给数组对象添加属性