JavaScript - 将多个数组与一个数组进行比较

JavaScript - compare multiple arrays to one

我想输出'buns'和'duns'中哪个与'me'有最多的共同元素。我应该怎么做?

var buns = ['bap', 'bun', 'bop'];
var duns = ['dap', 'dun', 'dop'];

var me = ['dap', 'bun', 'bop'];

reduce遍历要测试的数组并检查每个元素是否在me.

function common(arr1, arr2) {
  return arr2.reduce(function (p, c) {
    if (arr1.indexOf(c) > -1) p++;
    return p;
  }, 0);
}

common(me, buns); // 2
common(me, duns); // 1

DEMO

索引重要

function hamd(a, b) {
    return a.reduce((sum, item, i) => {
        if (item !== b[i]) return sum + 1;
        return sum;
    }, 0);
}

索引不重要,重复不重要

function diff(a, b) {
    return a.reduce((sum, item, i) => {
        if (b.indexOf(item) === -1) return sum + 1;
        return sum;
    }, 0);
}

索引不重要,重复重要

function diffU(a, b) {
    b = b.slice();
    return a.reduce((sum, item, i) => {
        let i = b.indexOf(item);
        if (i === -1) return sum + 1;
        b.splice(i, 1);
        return sum;
    }, 0);
}

分数最低的相似度最高,例如

diff(me, buns) // 1
diff(me, duns) // 2
// `buns` is more like `me` than `duns`

请注意,当 Array 的长度不同时,这些不是交换操作;当 a.length !== b.length
时,diff(a, b) 可能与 diff(b, a) 不同 如果你想比较结果,你需要在所有测试的同一侧使用公共数组