添加条件以使用TypeScript循环创建对象

时间:2018-09-21 22:07:23

标签: javascript angular typescript

因此,我的代码中存在此循环,该循环实质上是获取日期(日期)数组,并将每个键作为键/值对(“ date”:“ dates [i]”)添加到数组中的每个对象(值)。

  values.forEach((obj, i) => obj.date = dates[i]);

问题是,我的“值”数组中的某些位置为“空”,并且我收到“错误TypeError:无法将属性'date'设置为null”。

我该如何调整?有没有一种使用TypeScript的方法来为这些“空”值包含catch / condition,并将其替换为包含该键/值对(“ date”:“ dates [i]”)的新对象?

类似:

values.forEach((obj, i) => 

    if (values[i]==null){
        values[i]=={}
        values[i].date == dates[i]
       }
    else {
        obj.date = dates[i]
       }
);

如果有关系,我将使用Angular 5组件将其从技术上写为this.values和this.dates。

我很难弄清楚这一点。谢谢!!

1 个答案:

答案 0 :(得分:3)

您想要的行为可以通过以下方式实现:

values = values.map((obj, i) => {
 if (!obj) {
   return {date: dates[i]};
 }
 obj.date = dates[i];
 return obj;
});

在这种情况下,Array.map比Array.forEach更合适,因为您的意思是要更改数组上的对象(Array.map在每次迭代时为该位置返回一个新对象,在处返回一个新数组。所有迭代的结束)。

如果使用Array.forEach,则可以更改数组中某些现有对象的某些属性,但不能进行以下操作:

values.forEach((obj, i) => {
 if (!obj) {
   obj = {date: dates[i]};
 }
 obj.date = dates[i];
});

'if'内的代码将无法达到预期的效果(数组内的obj将继续为null),因为每个对象仅引用数组内的相应元素。