JavaScript - 将多个数组比较为一个

时间:2016-05-07 15:21:36

标签: javascript arrays comparison

我想输出哪些'包子'和'duns'与'我'的共同点最多。我该怎么做?

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

索引重要

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 的长度不同时,这些不是可交换的操作;当diff(a, b)时,diff(b, a)可能与a.length !== b.length不同 如果要比较结果,则需要在所有测试的同一侧使用公共数组