在Angular 2,JavaScript中无法使用foreach推送动态内容

时间:2018-01-26 15:02:49

标签: javascript arrays json angular object

我在Angular中使用反应形式,我从输入字段中获取数据。但是在我将数据推送到某个变量之前,我必须进行一些处理。

//here data contains all the form data submitted using the form
let data = this.someForm.value;

其中一个输入字段值包含逗号分隔值,如下所示:"45,756,879,345"。我使用','将其拆分为一个值数组,并将其转换为整数。

//Get all numbers in an array
let arr = data['c'].split(',').map(function(item) {
    return parseInt(item);
});

现在我循环遍历每个arr值并将其推送到名为xyz的变量。这里,xyz是我在模型中定义的一些自定义类型。

我得到了什么

[
{
  a: 'some data',
  b: 'some more data'
  c: 4
},
{
  a: 'some data',
  b: 'some more data'
  c: 4
},
{
  a: 'some data',
  b: 'some more data'
  c: 4

},... 10 more objects
]

我的期望

[
{
  a: 'some data',
  b: 'some more data'
  c: 3
},
{
  a: 'some data',
  b: 'some more data'
  c: 46
},
{
  a: 'some data',
  b: 'some more data'
  c: 21

},... 10 more objects
]

推送动态数据的方法

//here I am trying to push same data for 'a' and 'b' but dynamic data for temp['c'].

for(let i = 0; i < arr.length; i++){
    temp['a'] = 'some data';
    temp['b'] = 'some more data';
    temp['c'] = arr[i];

    this.xyz.push(temp);
}

如果我在arr中有10个数字。然后我在xyz中得到10个对象数组 当我打印xyz。我看到所有xyz对象都包含相同的temp ['c']值,这是arr包含的最后一个值。

1 个答案:

答案 0 :(得分:2)

您可能反复使用相同的参考。

for(let i = 0; i < arr.length; i++){
    var temp = {};
    temp['a'] = 'some data';
    temp['b'] = 'some more data';
    temp['c'] = arr[i];

    this.xyz.push(temp);
}

如果您在for循环之前定义了temp,则只需反复编辑相同的temp,将其推送到this.xyz数组中。

如果您甚至不想要temp变量:

for(let i = 0; i < arr.length; i++){
    this.xyz.push({
        a: 'some data',
        b: 'some more data',
        c: arr[i]
    });
}