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

时间:2018-04-02 15:48:34

标签: javascript typescript typescript2.0

我使用此方法在数组中查找对象:

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

3 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:2)

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

  

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

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

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

答案 2 :(得分:2)

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

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