JavaScript中嵌套循环的替代方法

时间:2019-09-13 18:11:15

标签: javascript reactjs loops for-loop nested

我需要在数组1中获取一个元素,并将其与数组2中的每个其他元素进行比较,以查看是否存在匹配项。我需要对数组一中的每个元素执行此操作。

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的每个单独的元素进行比较以搜索匹配项

2 个答案:

答案 0 :(得分:-1)

您可以使用Array.find或Array.filter

Array.find -返回第一个匹配的元素

someVec[length-n]

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

Array.filter -返回所有匹配元素的数组

array.find(item => item.id === 1)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

希望有帮助!

答案 1 :(得分:-1)

您可以使用数组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()方法。