首页 > 解决方案 > 添加条件以使用 TypeScript 循环创建对象

问题描述

所以我的代码中有这个循环,它本质上是一个日期数组(日期)并将每个日期作为键/值对(“日期”:“日期[i]”)添加到我的数组中的每个对象(值) .

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

问题是,我的“值”数组中的某些位置是“空”,我收到“错误类型错误:无法设置属性“日期”为空。

我该如何调整?有没有办法使用 TypeScript 为这些“空”值包含一个捕获/条件,并用包含该 ("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。

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

标签: javascriptangulartypescript

解决方案


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

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 将继续为空),因为每个对象仅引用数组中的相应元素。


推荐阅读