如果找到元素,如何在数组中添加元素?

问题描述 投票:0回答:3

我用这个方法在数组中查找对象:

lat arr = [];
found = this.obj[objKey].filter(item => item[internKeyName] == 7047);
arr.push(found);

问题是如果没有找到元素,则将其作为undefined添加到数组arr。怎么避免这个?

为什么它找不到带键的元素:“subjectId”:

let objKey = 7047;
let k = "subjectId";
let v = 7047;

found = this.obj[objKey].filter(item => item[k] == v);

console.log(found);// undefined

enter image description here

javascript typescript typescript2.0
3个回答
2
投票

函数filter不会返回undefined,而是返回一个空数组(如果没有元素满足条件)。

问题是如果没有找到元素,则将其作为undefined添加到数组arr

您可能想要找到一个特定的元素,因此,如果您只想要一个对象而不是只有一个索引的Array,我建议您使用函数find

lat arr = [];
found = this.obj[objKey].find(item => item[internKeyName] == 7047);
if (found) arr.push(found);

5
投票

您可以通过在将found推入阵列之前检查长度来避免这种情况。

lat arr = [];
found = this.obj[objKey].filter(item => item[internKeyName] == 7047);
found.length > 0 && arr.push(...found);

我正在使用spread syntax将每个元素作为自己的项目推送到新数组,我认为这就是你想要的。如果您希望所有找到的项目都是自己的数组项,则可以删除...


2
投票

您可以直接推送带有所需对象的扩展数组,空数组不会传播(spread syntax ...)。

arr.push(...this.obj[objKey].filter(item => item[internKeyName] == 7047));
© www.soinside.com 2019 - 2024. All rights reserved.