JS 原生 push对象到数组中遇到的问题

在做小程序开发时,需要将一个对象push到数组中,第一次写法是

 for(var j in that.data.goods ){//遍历商品信息 获取商品id
        // console.log(that.data.goods[j].id)
      for(var h in that.data.cart.list){//遍历缓存中购物车列表,获取下标
          if(j==h){
           // var goods_id_list ={‘id‘:‘‘,‘num‘:‘‘};//定义一个接受对象
            console.log(that.data.goods[j].id)//获取了所选商品的id值
            console.log(that.data.cart.list[h])//获取了所选商品的数量
            that.data.cartGoods=that.data.goods[j].id;
           that.data.cartGoods = that.data.cart.list[h];
            // var aa = that.data.cartGoods
             goods.push(that.data.cartGoods);//添加数组信息
          }
      }

这样输出的结果你数组元素都是最后一个对象。因为tmp声明在for循环之外,当listData数组push这个tmp对象时,一直是同一个对象,而并不是将对象的数据压入,只是在listData数组建立了一个对象的引用关系。故随着for的i值改变,tmp对象内部的内容也跟着改变,而listData压入的对象却始终是tmp这个对象(tmp生命周期不受for循环影响)。所以最终console.log(listData)出来的对象数组里面的元素都是一样的数据。简言之:就是tmp对象的数据再变,但是listData压入的tmp却是不变的。

需要在里面定义一个接受数组

    for(var j in that.data.goods ){//遍历商品信息 获取商品id
        // console.log(that.data.goods[j].id)
      for(var h in that.data.cart.list){//遍历缓存中购物车列表,获取下标
          if(j==h){
           var goods_id_list ={‘id‘:‘‘,‘num‘:‘‘};//定义一个接受对象
            console.log(that.data.goods[j].id)//获取了所选商品的id值
            console.log(that.data.cart.list[h])//获取了所选商品的数量
            goods_id_list.id=that.data.goods[j].id;
            goods_id_list.num = that.data.cart.list[h];
            // var aa = that.data.cartGoods
             goods.push(goods_id_list);//添加数组信息
          }
      }
    }
时间: 2024-11-06 02:23:15

JS 原生 push对象到数组中遇到的问题的相关文章

js 基础知识 对象与数组

对象是一种无序属性的集合,每个属性都有自己的名字和值. 对象的创建有很多种,我在第一章已经说过了. 如何遍历一个对象: var x;var txt="";var person={fname:"Bill",lname:"Gates",age:56}; for (x in person)       //x其实是一个变量,代表的是person对象的属性{txt=txt + person[x];              //person[属性]  等

把多个字符串里面的项写到不同的对象中,然后在push到一个数组中

otherUserNames: "甲,乙,丙,丁"otherUserIds: "10008750,10008711,10003348,10008747" otherUserAvatars:'头像地址,头像地址2,头像地址3.头像地址4' 首先数据上面是在data里面拿到的 原理首先将字符串转换成数组 if(otherUserAvatars){ let obj={}, 先定义一个对象来装n个对象 for(var i=0;i<otherUserAvatars.sp

jQuery对象与JS原生dom对象之间的转换

jQuery就是JS的一个扩展库,工具库,提供很多方便快捷的方法,所以将JS对象转换为jQuery对象后,能更方便地操作这个对象.但是jQuery对象也不是万能的,有一些JS对象有的能,jQuery对象并没有提供,所以需要转换回JS对象,才能进行操作.另外一种情况可能是,你使用某些第三方库,接口函数只能接受JS对象或者jQuery对象,那么你就需要在这两者之间进行转换. 1.将jQuery转换为dom对象的方法 [index] 或者.get(index): a.$(“#form”)[index]

JS(三)Date对象和数组对象

一.简介 1.日期对象:即Date对象,可以获得日期.时间.星期.时区等信息 2.数组对象:即array对象,就是讲php中的数组在js中以js的形式创建. 二.实例代码 /** * 日期:包含日期.时间.星期.时区等 */ function myFunction() { // 日期 document.write(Date() + "<br/>");// 标准时间戳 document.write(new Date().getTime() + "<br/>

js学习笔记之在数组中删除重复的元素自保留一个

遍历要删除的数组arr, 把元素分别放入另一个数组tmp中,在判断该元素在arr中不存在才允许放入tmp中 <script type="text/javascript"> var student = ['qiang','ming','tao','li','liang','you','qiang','tao']; function unique(arr){ // 遍历arr,把元素分别放入tmp数组(不存在才放) var tmp = new Array(); for(var

JS性能探讨:往数组中添加项

比较了4种可以向数组添加项的方法之间的性能: 使用索引器添加 console.time("index"); var a = []; for (var i = 0, l = times; i < l; i++) { a[i] = i; } console.timeEnd("index"); 使用push方法 console.time("push"); var a = []; for (var i = 0, l = times; i <

object-c之kvc kvo(人中有属性数组、Book对象,数组中装载Book对象)

KVC(KeyValueCoding) “键-值-编码”是一种可以直接通过字符串的名字(key)来访问类实例变量的机制.KVC可以用来访问和设置实例变量的值.设置方式:[self setValue:aName forKey:@"name"] [self setValue:aName forKeyPath:@"person.name"] 访问方式: aString = [self valueForKey:@"name"] aString = [se

js某一元素在数组中的索引

第一种:数组遍历 1 function search(arr,dst){ 2 var i = arr.length; 3 while(i-=1){ 4 if (arr[i] == dst){ 5 return i; 6 } 7 } 8 return false; 9 } 使用方法: var a=[1,2,3,4]; search(a,3);//返回2 第二种:indexOf() var arr=[1,2,3,4] arr.indexOf(2);//返回1 在某些IE版本中,不支持indexOf(

利用js将 json对象在textarea中赋值与展示

明明很简单的东西,可惜网上一大堆废话.在此记录,转需. jsonStr = JSON.stringify(jsondata,null,4); example: <!doctype html> <!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ --> <!--[if lt IE 7 ]> <html class="no-js ie6" lang