繁体   English   中英

Javascript 中嵌套 for 循环的替代方案

[英]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);

您可以阅读有关reduce()方法和find()方法的信息。

您可以使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM