JavaScript-将多个数组与一个数组进行比较
JavaScript - compare multiple arrays to one
我想输出"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)
如果你想比较结果,你需要在所有测试的同一侧使用公共数组
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 根据id将json数组组合为一个json数组
- JavaScript数组包含一个值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- jQuery$.inArray()总是返回-1和一个对象数组
- 在数组中的一个元素上设置多个值
- javascript处理一个对象数组以获得一个新的对象数组
- 作为一个二维数组,从ajax接收
- 你能用来自数组的属性名称生成一个对象吗
- 多维关联数组的最后一个索引
- 如何创建一个方法来验证数组的范围
- 循环以检查数组中的最后一个图像
- 在Javascript中将一个值和字符串数组转换为if语句
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 如何将一个对象添加到每个对象数组中
- 如何创建一个谷歌地图地理坐标数组
- 如何从另一个带下划线的数组中筛选带元素的数组
- 使用window.location.htm和匹配的URL数组(一个用于桌面,一个用于移动)将桌面网站重定向到移动
- Javascript排序多维数组-一个完整的例子
- 刽子手的游戏.2数组.一个需要相应地更新另一个