因此,我的代码中存在此循环,该循环实质上是获取日期(日期)数组,并将每个键作为键/值对(“ 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。
我很难弄清楚这一点。谢谢!!
答案 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),因为每个对象仅引用数组内的相应元素。