Javascript:将对象从foreach推送到数组

Ben*_* E. 2 javascript arrays foreach

我想根据它们的ID从数组中提取对象的集合.我正在使用vanilla Javascript.

contacts = [
    {ID: 1, firstName: "Aaron", lastName: "Smith"},
    {ID: 2, firstName: "Ben", lastName: "Smith"},
    {ID: 3, firstName: "Conrad", lastName: "Smith"}
];
filteredContactIds = [1, 3];
filteredContacts = [];

filteredContactIds.forEach(function (filteredId) {
    filteredContacts.push(
        contacts.forEach(function (contact) {
            if (contact.ID == filteredId) {
                return contact;
            }
        })
    )
});
Run Code Online (Sandbox Code Playgroud)

Contacts和filteredContactIds是简化的,在我的代码中,两个数组都正确填充.问题是,filteredContacts数组只接收每个联系人对象的ID属性,我想插入整个对象.

我已经用尽了有限的理解.任何人都可以指出这个问题吗?

Li3*_*357 5

您的方法的问题是Array#forEach不返回值.它只对数组中的每个项执行一些操作.这意味着undefined被推到了filteredContacts.你可以使用,contacts.filter但你可以删除内循环.

使用Array#filter和数组包含检查:

const contacts = [
    {ID: 1, firstName: "Aaron", lastName: "Smith"},
    {ID: 2, firstName: "Ben", lastName: "Smith"},
    {ID: 3, firstName: "Conrad", lastName: "Smith"}
];
const filteredContactIds = [1, 3];
const filteredContacts = contacts.filter(({ ID }) => filteredContactIds.includes(ID));
console.log(filteredContacts);
Run Code Online (Sandbox Code Playgroud)

而不是必须有两个循环,一个单一的contacts数组运行将起作用.这将遍历数组并检查当前联系人的ID是否在filteredContactIds数组内部,从而删除另一个循环.这是ES5及以下的desugared版本:

var contacts = [
    {ID: 1, firstName: "Aaron", lastName: "Smith"},
    {ID: 2, firstName: "Ben", lastName: "Smith"},
    {ID: 3, firstName: "Conrad", lastName: "Smith"}
];
var filteredContactIds = [1, 3];
var filteredContacts = contacts.filter(function(contact) {
  return filteredContactIds.indexOf(contact.ID) > -1;
});
console.log(filteredContacts);
Run Code Online (Sandbox Code Playgroud)

相反的Array#includes,它使用Array#indexOf和不使用对象解构也不箭头的功能也const.