【问题标题】:Adding an conditional to create object with a TypeScript loop添加条件以使用 TypeScript 循环创建对象
【发布时间】:2018-09-22 06:45:13
【问题描述】:

所以我的代码中有这个循环,它本质上是获取一组日期(日期)并将每个日期作为键/值对(“date”:“dates[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。

我无法弄清楚这一点。谢谢!!

【问题讨论】:

  • 我的回答对你有帮助吗?
  • 是的!抱歉忘记回复了,谢谢!

标签: javascript angular typescript


【解决方案1】:

你想要的行为可以通过:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-20
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多