如何比较2个数组并获取每个匹配项的计数

时间:2017-04-28 15:53:56

标签: javascript jquery arrays ajax

假设AJAX调用成功返回2个数组。返回的数组每次都不同,但可能有一些共同的元素。例如,

        String result = "";   

        for (int i = 0; i < wordPositions.length; i++){
           result += singleWords[wordPositions[i]];
        }     

现在我想得到数组1的每个元素出现在数组2中的次数,在这种情况下,结果将是:

define mb1= ADD_MONTHS(TRUNC(SYSDATE,'MM'), -1);

我有以下代码比较两个数组,但我无法弄清楚如何保留计数器,我是否必须为array1的每个元素构建一个新的2d数组?在这种情况下,如何在不知道其内部元素的情况下构造数组?

array1 = [a, b, c, d]
array2 = [a, b, b, b, a, c, b, c, c]

3 个答案:

答案 0 :(得分:1)

&#13;
&#13;
var array1 = ['a', 'b', 'c', 'd'];
var array2 = ['a', 'b', 'b', 'b', 'a', 'c', 'b', 'c', 'c'];

var result = {}

array1.forEach(function(item) {
    result[item] = 0
})

array2.forEach(function(item) {
    if(result.hasOwnProperty(item)) {
        result[item]++
    }
})
console.log(result);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

要实现此目的,您只需要遍历array1以获取唯一值,然后您可以使用filter()查找第二个数组中存在多少个值。试试这个:

var array1 = ['a', 'b', 'c', 'd'];
var array2 = ['a', 'b', 'b', 'b', 'a', 'c', 'b', 'c', 'c'];

var result = {};
array1.forEach(function(item) {
  result[item] = array2.filter(t => t == item).length;
})

console.log(result);

答案 2 :(得分:0)

您可以在O(n);

中执行以下操作

&#13;
&#13;
var arr1   = ["a", "b", "c", "d"],
    arr2   = ["a", "b", "b", "b", "a", "c", "b", "c", "c"],
    result = arr2.reduce((h,p) => (h.hasOwnProperty(p) && h[p]++, h) ,arr1.reduce((m,k) => (m[k] = 0,m),{}));
console.log(result);
&#13;
&#13;
&#13;