[英]Alternatives to nested for loops in Javascript
我需要取数组一中的一个元素,并将其与数组二的所有其他元素进行比较,以查看是否匹配。 我需要对数组一中的每个元素执行此操作。
for ( let i = 0, j = userArray.length; i < j; i++) {
for ( let c = 0, d = userArray.length; c < d; c++) {
object = {
id: userArray[i].account,
name: userArray[i].name,
title: "",
rating: ""
}
if ( userArray[i].account === accountArray[c].id) {
object.title = accountArray[c].title.title
}
if (object.title !== ""){
objectArray.push(object)
}
}
}
有没有更有效的方法来解决这个问题。
期望的结果是将 accountArray 的每个元素与 userArray 的每个单独元素进行比较以搜索匹配项
您可以使用数组reduce()
方法来过滤您的userArray
并将其映射到具有组合结果的新数组中。
这是一个示例(带有存根数据):
const userArray = [ { account: 1, name: 'user 1' }, { account: 2, name: 'user 2' }, { account: 3, name: 'user 3' }, { account: 4, name: 'user 4' }, { account: 5, name: 'user 5' } ]; const accountArray = [ { id: 1, name: 'account 1', title: 'account 1 title' }, { id: 3, name: 'account 3', title: 'account 3 title' }, { id: 5, name: 'account 5', title: 'account 5 title' } ]; const mergedList = userArray.reduce((acc, u) => { const account = accountArray.find(a => a.id === u.account); if (account) { acc.push({ id: u.account, name: u.name, title: account.title, rating: '' }) } return acc; }, []); console.log(mergedList);
您可以使用 Array.find 或 Array.filter
Array.find - 返回第一个匹配元素
array.find(item => item.id === 1)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
Array.filter - 返回所有匹配元素的数组
array.filter(item => item.id === 1)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
希望能帮助到你!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.