我想输出哪些'包子'和'duns'与'我'的共同点最多。我该怎么做?
var buns = ['bap', 'bun', 'bop'];
var duns = ['dap', 'dun', 'dop'];
var me = ['dap', 'bun', 'bop'];
答案 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
答案 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
不同
如果要比较结果,则需要在所有测试的同一侧使用公共数组