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属性,我想插入整个对象.
我已经用尽了有限的理解.任何人都可以指出这个问题吗?
您的方法的问题是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.
| 归档时间: |
|
| 查看次数: |
2343 次 |
| 最近记录: |