JS找到推送未定义的函数

时间:2017-09-12 20:35:30

标签: javascript

我创建了一个“过滤器”函数,它接收一个对象数组。每个对象都有accountId属性。我的函数应该过滤掉具有不同accountId的对象。但是,它会在那里推送undefined对象。

我的功能出了什么问题?

export const filterItems = (myArray, accountId) => {

   let filteredItems = [];
   filteredItems.push(myArray.find(items => items.accountId === accountId));

   return filteredItems;
}

当我将accountId传递给不在数组中的函数时,输出是一个数组,其中包含一个项目且项目未定义 - 请参阅下文:

[
  0: undefined
]

我做错了什么?

3 个答案:

答案 0 :(得分:3)

您的代码始终调用.push()。如果找不到该项,则.find()函数返回undefined。

您可以从.find()获取返回值,然后仅在实际找到结果时推送结果:

let filteredItems = [];
let item = myArray.find(items => items.accountId === accountId);
if (item !== undefined)
  filteredItems.push(item);
return filteredItems;

答案 1 :(得分:3)

myArray.find(items => items.accountId === accountId)正在返回undefined(并且正在推送到filteredItems

请改为尝试:

//...
let item = myArray.find(items => items.accountId === accountId);

if(item) {
    filteredItems.push(item);
}
//...

答案 2 :(得分:3)

如果没有找到,你可以过滤数组并返回一个空数组。

export const filterItems = (myArray, accountId) =>
    myArray.filter(items => items.accountId === accountId);