多变量长度javascript数组中的公共值

多变量长度javascript数组中的公共值,javascript,arrays,dynamic-arrays,Javascript,Arrays,Dynamic Arrays,我有7个javascript数组,我需要找到所有数组中存在的值 我不认为我是第一个问这个问题的人,但我找不到解决这个问题的办法。我读了很多答案,但它们都只比较了2个数组,而且这种逻辑不适用于多个数组 我尝试了中提出的函数,但它们不适合我使用的数组类型 我拥有的数组在元素中可以有不同的长度,元素的长度也可以不同。我也可能有零项数组,在其中它们不应该进行比较 主要问题是数字长度不同。我尝试的所有函数都需要排序,但这会导致问题 鉴于此: xnombre = [1,2,3,4,5,24,44,124,1

我有7个javascript数组,我需要找到所有数组中存在的值

我不认为我是第一个问这个问题的人,但我找不到解决这个问题的办法。我读了很多答案,但它们都只比较了2个数组,而且这种逻辑不适用于多个数组

我尝试了中提出的函数,但它们不适合我使用的数组类型

我拥有的数组在元素中可以有不同的长度,元素的长度也可以不同。我也可能有零项数组,在其中它们不应该进行比较

主要问题是数字长度不同。我尝试的所有函数都需要排序,但这会导致问题

鉴于此:

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];
第一个到第二个数组排序为:

[1, 124, 125, 165, 2, 24, 3, 4, 44, 5] 
[1, 124, 44, 5, 55] 
当我“相交”时,我只得到[1124],但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;
}
//var result=intersect(a、b、c,…);
函数相交(变量参数){
//在此处或之前对数组进行排序
变量目标=参数[0];
for(var i=1;i0){
目标=交叉点安全(目标,参数[i]);
}
}
回报目标;
}

我用下划线尝试了你的问题

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);
但正如您看到的,我没有给出空数组,所以您必须忽略空数组


这需要一些新的数组方法,但它会生成所需的输出

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]

抱歉@Juan请确保,您只需要在所有数组中通用的值,或者也需要排序的值。只需要在所有非空数组中存在的值。不管它们是否被排序,我试过你的问题,但我认为没有任何元素是所有元素都通用的。因此,你再一次需要的是,公共值是将所有数组连接成一个没有重复的数组。最后一个数组不包含5个。