如何使用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]