我使用此方法在数组中查找对象:
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
答案 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));