javascript - 如何在javascript中比较数组1[对象数组]与数组2

标签 javascript arrays

我想将数组 1 与数组 2 进行比较,数组 1 有对象数组。数组 2 中可用的任何项目也应该在数组 1 上可用。如果是这样,那么,我必须将项目从数组 2 推送到新数组,然后,我返回新创建的 FinalArray。 我编写了代码,正如我提到的,它工作正常,但是,下面的代码执行了“for 循环”许多我不想要的项目。

我想避免多次循环执行。

var arr1 = [{"count":1,"name":"hitler"},{"count":1,"name":"cool"},{"count":1,"name":"cooola"},{"count":1,"name":"cute"},{"count":1,"name":"nyle"},{"count":1,"name":""},{"count":1,"name":"path"},{"count":1,"name":"root"},{"count":1,"name":"sssstag"},{"count":1,"name":"ssssu tag"},{"count":1,"name":"sutag"},{"count":1,"name":"tag2"},{"count":1,"name":"arrogant"},{"count":1,"name":"test01"},{"count":1,"name":"test10"},{"count":1,"name":"uber"},{"count":1,"name":"union"},{"count":1,"name":"assettag"},{"count":1,"name":"wire"}];

function intersect_arrays(a, b) {

    var matches = [];

    for ( var i = 0; i < a.length; i++ ) {
        for ( var e = 0; e < b.length; e++ ) {
            if ( a[i].name === b[e] ) matches.push( b[e] );
        }
    }
    return matches;
}


var arr2 = ["hilter","arrogant","cool","uber"];

var finalArray = intersect_arrays(arr1, arr2);
console.log(finalArray);

有人能帮助我找到更好的方法来实现同样的目标吗?

最佳答案

将内部 for 循环替换为

var matches = a.filter( function(item){ return b.indexOf( item.name ) > -1 } );

例如

var arr1 = [{
  "count": 1,
  "name": "hitler"
}, {
  "count": 1,
  "name": "cool"
}, {
  "count": 1,
  "name": "cooola"
}, {
  "count": 1,
  "name": "cute"
}, {
  "count": 1,
  "name": "nyle"
}, {
  "count": 1,
  "name": ""
}, {
  "count": 1,
  "name": "path"
}, {
  "count": 1,
  "name": "root"
}, {
  "count": 1,
  "name": "sssstag"
}, {
  "count": 1,
  "name": "ssssu tag"
}, {
  "count": 1,
  "name": "sutag"
}, {
  "count": 1,
  "name": "tag2"
}, {
  "count": 1,
  "name": "arrogant"
}, {
  "count": 1,
  "name": "test01"
}, {
  "count": 1,
  "name": "test10"
}, {
  "count": 1,
  "name": "uber"
}, {
  "count": 1,
  "name": "union"
}, {
  "count": 1,
  "name": "assettag"
}, {
  "count": 1,
  "name": "wire"
}];

var arr2 = ["hilter", "arrogant", "cool", "uber"];

function intersect_arrays(a, b) {
  var matches = a.filter(function(item) {
    return b.indexOf(item.name) > -1
  });
  matches = matches.map( function(item){ return item.name } );
  return matches;
}

console.log(intersect_arrays(arr1, arr2))

关于javascript - 如何在javascript中比较数组1[对象数组]与数组2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39784110/

相关文章:

javascript - 使用 require.js 交叉访问模块?

javascript - 在 javascript/typescript 中绘制形状并填充颜色

javascript - 谷歌脚本: Function to tally votes

javascript - d3.js 序数轴未正确更新

c - 在c中遍历P*Q网格中的一些单元格

c - 如何在我的代码中实现二维指针数组来满足要求?

javascript - 在嵌套数组中查找具有值的对象并添加属性

javascript - 如何在 typescript 中编写遍历列表的函数?

C for循环继续递增

c++ - 有没有一种方法可以遍历 C++ 数组而不需要从一开始就知道结束地址?