Js从数组中复制对象而没有引用

时间:2017-05-12 07:47:48

标签: javascript

我遇到了将对象复制到数组的问题。我认为这是一个参考问题。

在我的程序中我有几个数组。首先是dataForMonth - 它是包含月份数据的对象数组。第二个是包含产品对象的产品数组。产品有属性forecastArry wchich是对象数组。

这里代码:

this.allProducts.map(function (product) {

            var dataForMonth = data.filter(function (e) {
                return e.dataId === product.productDataId;
            });

            var z = { posId: product.sales_plan_pos_id, arry: [] }
            for (var sheetMonth of sheet.channels) {
                var result = dataForMonth.filter(function (e) {
                    return e.CHANNEL === sheetMonth.CHANNEL;
                });

           product.forecastArry[someId].channels = result;
); 

问题是每个更改的频道属性都具有相同的值 - 它是上一个产品的值? 有谁知道如何解决它?

1 个答案:

答案 0 :(得分:0)

好像你想编辑product中的每个this.allProducts。因此,您希望向地图添加返回值。您还应该使用let,以便声明的变量范围保留在map函数中,尽管我相信map函数已经处理了这个问题。此外,并非您必须将this.allProducts重新分配给您的地图函数调用。所以你的答案应该如下:



this.allProducts = this.allProducts.map(function (product) {

  let dataForMonth = data.filter(function (e) {
      return e.dataId === product.productDataId;
  });

  let channelsForMont = [];
  let z = { posId: product.sales_plan_pos_id, arry: [] }
  for (let sheetMonth of sheet.channels) {
      let result = dataForMonth.filter(function (e) {
          return e.CHANNEL === sheetMonth.CHANNEL;
      });

 product.forecastArry[someId].channels = channelsForMont;
 return product;
); 




P.S您的原始代码有一些缺失括号,result变量未使用。你应该对他们采取一些措施。