如何使用javascript从4个不同的数组中获取公共值

如何使用javascript从4个不同的数组中获取公共值,javascript,arrays,Javascript,Arrays,我有下面的箭头,我想从所有四个数组中获得公共值。我尝试了下面的代码,它的工作,但不是正确的方式,我想要的。在新数组中显示的不是[2,3],而是至少在两个或三个数组中常见的其他值 我的代码 var a = [11, 2, 3, 4], b = [2, 6, 3, 5], c = [4, 2, 20, 3], d = [34, 2, 21, 5, 3], result = [], common = []; function findCommon () {

我有下面的箭头,我想从所有四个数组中获得公共值。我尝试了下面的代码,它的工作,但不是正确的方式,我想要的。在新数组中显示的不是
[2,3]
,而是至少在两个或三个数组中常见的其他值

我的代码

var a = [11, 2, 3, 4],
    b = [2,  6, 3, 5],
    c = [4, 2, 20, 3],
    d = [34, 2, 21, 5, 3],
    result = [],
    common = [];

function findCommon () {    
    for(var i = 0; i < arguments.length; i++){
        var garr = arguments[i];
        result = result.concat(arguments[i]);
    };
}
findCommon(a,b,c,d);

var sorted_arr = result.sort();

for(var i = 0; i< result.length-1; i++){

    if(result[i+1] == sorted_arr[i]){
        common.push(result[i]);
    }
};

alert(common); //[2, 2, 2, 3, 3, 4, 5]
var a=[11,2,3,4],
b=[2,6,3,5],
c=[4,2,20,3],
d=[34,2,21,5,3],
结果=[],
普通=[];
函数findCommon(){
for(var i=0;i
试试这个:

function findCommon()
{
    var common=[];
    for(i=0; i<a.length; i++)
    {
       if(b.indexOf(i) != -1 && c.indexOf(i) != -1 && d.indexOf(i) != -1) 
       {
          common.push(i);
       }
    }
    return common;
}
函数findCommon()
{
var公共=[];

对于(i=0;i

您可以使用indexOf来解决:

array.indexOf(element) >=0 // it means that element is in array

当您使用jQuery时,thre是一个较短的版本:

$.inArray(value, array)
更奇特的方法是使用filter():


假设你想要一些X数组的通用数据,而我们讨论的是整数,我觉得这就像是一个bucket业务

var a = [11, 2, 3, 4],
    b = [2,  6, 3, 5],
    c = [4, 2, 20, 3],
    d = [34, 2, 21, 5];

function findCommon()
{
    var bucket = [];
    var maxVal = 0;
    var minVal = 0;

        for(var i = 0; i < arguments.length; i++)
        {
            for(var j = 0 ; j < arguments[i].length ; j++)
            {
                var val = arguments[i][j];
                bucket[val] = bucket[val] + 1 || 1;
                if(val > maxVal)
                {
                    maxVal = val;
                }
                else if(val < minVal)
                {
                    minVal = val;
                }
            }
        }

    var retVal = 0;
    var maxTimes = 0;
    for(var i = minVal ; i <= maxVal ; i++)
    {
        var val = bucket[i];
        if(val > maxTimes)
        {
            maxTimes = val;
            retVal = i;
        }
    }

    return retVal;
}

console.log(findCommon(a,b,c,d));
var a=[11,2,3,4],
b=[2,6,3,5],
c=[4,2,20,3],
d=[34,2,21,5];
函数findCommon()
{
var bucket=[];
var-maxVal=0;
var-minVal=0;
for(var i=0;imaxVal)
{
maxVal=val;
}
否则如果(val
.

这次尝试

将查找具有重复次数的公用编号

var a=[11,2,3,4],
b=[2,6,3,5],
c=[4,2,20,3],
d=[34,2,21,5],
结果=[],
普通=[];
var all=a.concat(b)、concat(c)、concat(d);
var commonNum=0;
var largestCounter=0
对于(变量i=0;i-1)计数器+=1;
如果(b.indexOf(all[i])>-1)计数器+=1;
如果(c.indexOf(all[i])>-1)计数器+=1;
如果(d.indexOf(all[i])>-1)计数器+=1;
如果(计数器>最大计数器)
{最大计数器=计数器;
commonNum=所有[i];
}
};

警报(commonNum+“带计数”+最大计数器);
您可以使用数组作为对象的值,并使用数字作为键。这样可以很容易地计算数字。注意,此代码也是未来的证明,因此如果您希望测试更少或更多的数组,这将允许您。它还可以对单个数组进行重复数据消除,因此每个数组中的数字只计算一次,以防止出现错误

function findCommon() {
    var obj = {};
    var out = [];
    var result = [];

    // convert arguments to a proper array
    var args = [].slice.call(arguments);
    var len = args.length;
    for (var i = 0, l = len; i < l; i++) {

      // grab a de-duped array and and concatenate it
      // http://stackoverflow.com/a/9229821/1377002
      var unique = args[i].filter(function(item, pos) {
        return args[i].indexOf(item) == pos;
      });
      result = result.concat(unique);
    }
    for (var i = 0, l = result.length; i < l; i++) {
        var el = result[i];

        // if the object key doesn't exist, create an array
        // as the value; add the number to the array
        if (!obj[el]) obj[el] = [];
        obj[el].push(el);
    }
    for (var p in obj) {

     // if the array length equals the original length of
     // the number of arrays added to the function
     // add it to the output array, as an integer
     if (obj[p].length === len) out.push(+p);
    }
    return out;
}

findCommon(a, b, c, d); // [2]
函数findCommon(){
var obj={};
var out=[];
var结果=[];
//将参数转换为正确的数组
var args=[].slice.call(参数);
var len=args.length;
对于(变量i=0,l=len;i
此外,这将找到所有多个键,因此如果将
d
中的
5
替换为
3
,结果将是
[2,3]


如果我们在所有四个数组中都有两个公共数据,那么这段代码将不起作用。当一个值只出现在三个数组中,而它是最常见的时会发生什么?当该公共数据不出现在a中时会发生什么?他想从所有四个数组中获取公共值。请尝试以下值:a=[11,82,3,4],b=[62,6,3,5],c=[4,2,20,3],d=[34,2,21,5];这四个数组之间没有任何公共值!如果我像
vara=[11,22,3,4],b=[22,6,3,5],c=[4,22,22,3],d=[34,2,21,3]这样放置数组,代码就会中断
在所有数组中,现在我在第三个数组中放置了22两次,而不是在第四个数组中。@RakeshKumar,试试这个:。我也更新了答案。@RakeshKumar,我必须返回到你的连接版本来实现这一点。好家伙,你太棒了!谢谢你的答案。
var a = [11, 2, 3, 4],
    b = [2,  6, 3, 5],
    c = [4, 2, 20, 3],
    d = [34, 2, 21, 5];

function findCommon()
{
    var bucket = [];
    var maxVal = 0;
    var minVal = 0;

        for(var i = 0; i < arguments.length; i++)
        {
            for(var j = 0 ; j < arguments[i].length ; j++)
            {
                var val = arguments[i][j];
                bucket[val] = bucket[val] + 1 || 1;
                if(val > maxVal)
                {
                    maxVal = val;
                }
                else if(val < minVal)
                {
                    minVal = val;
                }
            }
        }

    var retVal = 0;
    var maxTimes = 0;
    for(var i = minVal ; i <= maxVal ; i++)
    {
        var val = bucket[i];
        if(val > maxTimes)
        {
            maxTimes = val;
            retVal = i;
        }
    }

    return retVal;
}

console.log(findCommon(a,b,c,d));
function findCommon() {
    var obj = {};
    var out = [];
    var result = [];

    // convert arguments to a proper array
    var args = [].slice.call(arguments);
    var len = args.length;
    for (var i = 0, l = len; i < l; i++) {

      // grab a de-duped array and and concatenate it
      // http://stackoverflow.com/a/9229821/1377002
      var unique = args[i].filter(function(item, pos) {
        return args[i].indexOf(item) == pos;
      });
      result = result.concat(unique);
    }
    for (var i = 0, l = result.length; i < l; i++) {
        var el = result[i];

        // if the object key doesn't exist, create an array
        // as the value; add the number to the array
        if (!obj[el]) obj[el] = [];
        obj[el].push(el);
    }
    for (var p in obj) {

     // if the array length equals the original length of
     // the number of arrays added to the function
     // add it to the output array, as an integer
     if (obj[p].length === len) out.push(+p);
    }
    return out;
}

findCommon(a, b, c, d); // [2]