Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在多个数组中循环查找常见的内容_Javascript - Fatal编程技术网

Javascript 如何在多个数组中循环查找常见的内容

Javascript 如何在多个数组中循环查找常见的内容,javascript,Javascript,所以我有4个数组,其中每个数组都包含名称。该数组返回一个name或null的数组。名称在数组中是唯一的,但该名称可能出现在不同的数组中。某些数组可能为空。例如: 例如。 Array 1=[Bob,Sam,Mary,Jake]; Array 2=[Sam,Jacob,Tom]; Array 3=null数组4=[Stephanie,Sam]等 我要做的是获取所有数组中的公共字符串。 这就是我的想法:检查数组是否为null,然后将不为null的数组放入一个名为“notNull”的数组中。然后循环no

所以我有4个数组,其中每个数组都包含名称。该数组返回一个name或null的数组。名称在数组中是唯一的,但该名称可能出现在不同的数组中。某些数组可能为空。例如:

例如。
Array 1=[Bob,Sam,Mary,Jake]
Array 2=[Sam,Jacob,Tom]
Array 3=null
<代码>数组4=[Stephanie,Sam]等

我要做的是获取所有数组中的公共字符串。 这就是我的想法:检查数组是否为null,然后将不为null的数组放入一个名为“notNull”的数组中。然后循环notNull中的每个单独元素(数组),然后将数组中常见的名称存储在变量中。因此,在本例中,应打印Sam。

可用于检查所有数组中是否存在项:

var arr1 = ["a","b","c"];
var arr2 = ["c","d","e"];
var arr3 = ["f","g","c"];

var exists = [arr1,arr2,arr3].every(function(arr){return arr.indexOf("c") > -1}); // true
var exists2 = [arr1,arr2,arr3].every(function(arr){return arr.indexOf("a") > -1}); // false
可用于在多个阵列上进行筛选:

[arr1,arr2,arr3].reduce(function(a1,a2){ 
      return a1.filter(function(item){ return a2.indexOf(item) > -1 })}, arr1);
也许您可以尝试阵列的交集函数:

不要忘记将空数组替换为
[]


Remarque:它也适用于任何javascript对象(字符串…)。

此代码将忽略空数组并返回所有匹配项:

var array1=[“鲍勃”、“萨姆”、“玛丽”、“杰克”];
var array2=[“萨姆”、“雅各布”、“汤姆”];
var array3=null;
var array4=[“Stephanie”,“Sam”]
var commonNames=getCommonItems([array1,array2,array3,array4])
document.write(JSON.stringify(commonNames))//示例输出
//作用
函数getCommonItems(arraysToSearch){
var commonItems=[]
var start=false
对于(变量i=0;i}
以下是我将如何手动执行此操作(无库)

计算非空数组的数量,这是您预期遇到每个名称的次数

将每个名称存储在对象中,其中键是名称,遇到它的次数是值

使用其遇到的计数为预期计数(非空数组数)的名称构建一个数组

//数组的数组
变量数组=[
[“鲍勃”、“萨姆”、“玛丽”、“杰克”],
[“山姆”、“雅各布”、“汤姆”],
无效的
[“斯蒂芬妮”、“山姆”]
];
变量名称={};
var expectedCount=0;
var结果=[];
//构建“names”对象,将每个名称作为键和
//作为值遇到的次数

对于(var i=0,il=arrays.length;i这里有一种方法,使用
array.isArray
从第一个数组开始删除
null
,然后根据
是否
筛选其中的名称。每个
其余数组中的一个也有该名称

function common() {
    var args = [].slice.call(arguments).filter(Array.isArray);

    return args.shift().filter(function(name) {
        return args.every(function(arr) {
            return arr.indexOf(name) !== -1;
        });
    });
}

var commonNames = common(arr1, arr2, arr3, arr4 ....);
函数公共(){
var args=[].slice.call(arguments).filter(Array.isArray);
返回args.shift().filter(函数(名称){
返回args.every(函数(arr){
返回arr.indexOf(name)!=-1;
});
});
}
var arr1=[“鲍勃”、“萨姆”、“玛丽”、“杰克”];
var arr2=[“萨姆”、“雅各布”、“汤姆”];
var arr3=null;
var arr4=[“斯蒂芬妮”、“萨姆”];
var结果=普通(arr1、arr2、arr3、arr4);

document.body.innerHTML=''+JSON.stringify(结果,null,4)+'';
如果数组3不包含Sam,为什么要打印它呢?你的意思是程序将从notNull数组打印公共名称吗?@WayneOlinger忘了说应该打印它,因为Sam在notNulls数组中是公共的。所有数组都包含所有元素,然后计算每个元素的出现次数。@TarikhChouhan也许是你可以尝试下划线,正如我在回答中提到的;)它不应该检查给定的名称,它应该检查是否是任何名称,在notNull数组中是CommonThank。我试过你的方法,效果很好。解决这个问题对我来说太复杂了。你一定很好。你能解释一下JSON.stringfy的作用吗?我很高兴它帮助了你
JSON.stringfy
将JavaScript对象转换为字符串,因此您可以在示例output.Btw中读取它。性能方面,这应该是最好的,你可以得到哦,我看到。你是当场想到的还是通过你的编码经验知道该由谁来做?我真的很惊讶。我已经试着解决这个问题超过15个小时了!我通常在万不得已的时候咨询StackOverFlow,因为我想尝试自己解决它。我看到了这个问题,我可以想象如何解决它。然后我开始编码,并在飞行中完成。大约花了15分钟。这主要是通过编码的经验。尝试解决问题会带你去那里,你会走上好的道路!
// An array of your arrays
var arrays = [
    ["Bob", "Sam", "Mary", "Jake"],
    ["Sam", "Jacob", "Tom"],
    null,
    ["Stephanie", "Sam"]
];

var names = {};
var expectedCount = 0;
var result = [];

// Build out the "names" object, will contain each name as a key and
// the number of times encountered as a value
for (var i=0, il=arrays.length; i<il; i++) {
    if (arrays[i] !== null) {
        expectedCount++;
        for (var j=0, jl=arrays[i].length; j<jl; j++) {
            if (!names[arrays[i][j]]) names[arrays[i][j]] = 0;
            names[arrays[i][j]] ++;
        }
    }
}

// Build your result array with only the names that have been found
// the number of times as how many arrays were looped through.
for (var name in names) {
    if (names[name] == expectedCount) {
        result.push(name);
    }
}

console.log(result);
function common() {
    var args = [].slice.call(arguments).filter(Array.isArray);

    return args.shift().filter(function(name) {
        return args.every(function(arr) {
            return arr.indexOf(name) !== -1;
        });
    });
}

var commonNames = common(arr1, arr2, arr3, arr4 ....);