多个可变长度javascript数组中的常用值
Common values in multiple variable lenght javascript arrays
我在javascript中有7个数组,我需要找到所有这些数组中存在的值。
我想我不是第一个问这个问题的人,但是我找不到解决这个问题的办法。我读了很多答案,但他们都只比较2个数组,逻辑不适合多个数组。我尝试了在javascript中最简单的代码中提出的函数,但它们不适合我拥有的数组类型。
数组的元素长度可以不同,元素的长度也可以不同。我也可以有零项数组,它们不应该与之比较。
主要问题是不同的数字长度。我尝试过的所有函数都需要排序,但这会导致一个问题。
给定数组:
xnombre = [1,2,3,4,5,24,44,124,125,165];
xacomp = [1,5,44,55,124];
xeje = [];
xanio = [1,5,44,55,124];
xini = [1,5,44,55,124];
xaporte = [1,5,44,55,122,123,124,144,155,166,245];
xpcia = [2,1,3,4,6,5,7,9,12,12,14,15,44,16,17,19,124];
第一个to数组排序为:
[1, 124, 125, 165, 2, 24, 3, 4, 44, 5]
[1, 124, 44, 5, 55]
当我"相交"时,我只得到[1,124],但44和5却错过了。
任何帮助都会很感激。由于
另一个问题中的函数可以工作,但是您必须按数字排序数组,而不是按字典顺序排序,因为您正在处理数字,而不是字符串。
function sortNumber(a,b) {
return a - b;
}
var xnombre = [1,2,3,4,5,24,44,124,125,165];
var xacomp = [1,5,44,55,124];
xnombre.sort(sortNumber);
xacomp.sort(sortNumber);
要将此函数应用于多个数组,您可以连续应用此函数:
// var result = intersect(a, b, c, ...);
function intersect(var_args) {
// sort arrays here or beforehand
var target = arguments[0];
for (var i = 1; i < arguments.length; i++) {
if (arguments[i].length > 0) {
target = intersection_safe(target, arguments[i]);
}
}
return target;
}
这需要一些新的数组方法,但它会产生您想要的输出。
function intersection() {
var arrs = Array.prototype.filter.call(arguments, function (a) {
return a.length > 0;
}).sort(function (a, b) { // sort the arrays, so that we test the shortest.
return a.length - b.length;
});
var rest = arrs.slice(1),
test = arrs[0];
return test.filter(function (x) { return rest.every(function (a) { return a.indexOf(x) !== -1; }); });
}
var xnombre = [1, 2, 3, 4, 5, 24, 44, 124, 125, 165],
xacomp = [1, 5, 44, 55, 124],
xeje = [],
xanio = [1, 5, 44, 55, 124],
xini = [1, 5, 44, 55, 124],
xaporte = [1, 5, 44, 55, 122, 123, 124, 144, 155, 166, 245],
xpcia = [2, 1, 3, 4, 6, 5, 7, 9, 12, 12, 14, 15, 44, 16, 17, 19, 124];
intersection(xnombre, xacomp, xeje, xanio, xini, xaporte, xpcia)
// => [1, 5, 44, 124]
我用下划线试过了。
var _ = require('underscore');
xnombre = [1,2,3,4,5,24,44,124,125,165];
xacomp = [1,5,44,55,124];
xeje = [];
xanio = [1,5,44,55,124];
xini = [1,5,44,55,124];
xaporte = [1,5,44,55,122,123,124,144,155,166,245];
xpcia = [2,1,3,4,6,5,7,9,12,12,14,15,44,16,17,19,124];
var result = _.intersection(xnombre,xacomp,xanio,xini,xaporte,xpcia);
console.log(result);
但是正如你看到的,我没有给出空数组,所以你必须忽略空数组
小提琴
相关文章:
- 循环遍历以数组为值的Javascript对象
- 向多维数组添加值和从多维数组请求值
- JavaScript/jQuery JSON数组问题-值为未定义
- 如何在javascript中访问数组的值
- 如何按数组/对象值的倍数过滤对象数组
- 如何在Javascript中从Json数组导入值
- Javascript-如何在窗体上方显示数组的值
- 根据优先级获取数组的值
- 来自 JavaScript 中数组的值的总和
- JavaScript数组-将值相加
- 读取通过push生成的数组的值
- 正在尝试获取事件之外的更新数组的值
- php代码返回基于数组的值
- 循环遍历以数组作为值的对象的对象
- 我可以'没有找到使用Javascript和HTML将数组的值发送到另一个页面的方法
- 将子数组的值传递到JavaScript中的CharCodeAt中
- 向javascript对象数组添加值
- highland.js异步数组到值流
- 如何在javascript中复制数组的值并将其推送至相同的数组
- 将数组的值传递到HTML文本框中