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

JavaScript - compare multiple arrays to one

本文关键字:数组 一个 比较 JavaScript-      更新时间:2023-09-26

我想输出"buns"answers"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

演示

索引重要

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`

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