javascript - 添加条件以使用 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。
我很难弄清楚这一点。谢谢!!
解决方案
您想要的行为可以通过以下方式实现:
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 将继续为空),因为每个对象仅引用数组中的相应元素。
推荐阅读
- bash - 从文件中复制文件夹,但文件中的子文件夹除外
- android - 如何在 OnRecgonitionListener 方法中从 Android SpeechRecognizer 获取音频文件
- jmeter - 发布数据,其值显示有效响应数据,但来自正则表达式的相同值未在 jmeter 中显示有效响应数据
- javascript - jexcel更新表后我没有得到新值
- python - python - 当数组在python中具有不同的形状时,如何在单个数组中转换数组列表
- python - 如何在我的海龟游戏中设置最高分系统?
- firebase - Firestore 模拟器 REST API 身份验证
- docker - DockerHub Autobuild 失败但在本地成功
- firefox - 如何使用 chrome 等标志获取 Firefox 选择搜索引擎
- java - NLTK 找不到 java.exe(自发路径缩减)