Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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_Arrays_Filter - Fatal编程技术网

Javascript 检查对象数组的键/值对的简明方法?

Javascript 检查对象数组的键/值对的简明方法?,javascript,arrays,filter,Javascript,Arrays,Filter,如果下面数组中的每一个字符串都存在于数组中某个对象的某个id中,那么有什么简单明了的方法可以找到?我知道我可以执行for循环,但如果我运行多个查找,它会变得很乏味 以下示例应输出false,因为一个匹配,一个不匹配。 var array1= [ 'j2n4k2j3n42k3j4n', 'ln23jk4n2njknn2n' ] var array2 = [ { fruit:"banana" origin:"florida&q

如果下面数组中的每一个字符串都存在于数组中某个对象的某个id中,那么有什么简单明了的方法可以找到?我知道我可以执行for循环,但如果我运行多个查找,它会变得很乏味

以下示例应输出false,因为一个匹配,一个不匹配。

var array1= [
'j2n4k2j3n42k3j4n',
'ln23jk4n2njknn2n'
]


var array2 = [
    {
        fruit:"banana"
        origin:"florida"
        id:"j2n4k2j3n42k3j4n"
    },
    {
        fruit:"peach"
        origin:"georgia"
        id:"l2nkj2n3k4bj"
    },
]
您可以使用和

const array1=[“j2n4k2j3n42k3j4n”,“ln23jk4n2njknn2n”],
阵列2=[
{
水果:“香蕉”,
来源:“佛罗里达”,
id:“j2n4k2j3n42k3j4n”,
},
{
水果:“桃子”,
来源:“格鲁吉亚”,
id:“l2nkj2n3k4bj”,
},
];
const result=array1.every((id1)=>array2.some({id}=>id==id1));

控制台日志(结果)下面的代码输出一个布尔值。如果array2中的所有ID都可用,则为true

var数组1=[
“j2n4k2j3n42k3j4n”,
“l2nkj2n3k4bj”,
‘ln23jk4n2njknn2n’
]
变量array2=[{
水果:“香蕉”,
来源:“佛罗里达”,
id:“j2n4k2j3n42k3j4n”,
},
{
水果:“桃子”,
来源:“格鲁吉亚”,
id:“l2nkj2n3k4bj”
},
]
const results=array1.every(id=>array2.find(item=>item.id==id))

console.log(结果)
您可以使用
Array.prototype.idexOf
或更优雅的
Array.prototype.includes

让数组1=[
“j2n4k2j3n42k3j4n”,
“l2nkj2n3k4bjx”,
‘ln23jk4n2njknn2n’
]
设array2=[{
水果:“香蕉”,
来源:“佛罗里达”,
id:“j2n4k2j3n42k3j4n”,
},
{
水果:“桃子”,
来源:“格鲁吉亚”,
id:“l2nkj2n3k4bj”
},
]
控制台日志(“第一次进近”);
array2.forEach(e=>{
if(array1.indexOf(e.id)<0)console.log(false);
else console.log(true);
});
控制台日志(“第二次进近”);
array2.forEach(e=>{
if(array1.includes(e.id))console.log(true);
else console.log(false);
});解决方案1:可读代码,但性能不好。
你可以结合使用

var array1=['j2n4k2j3n42k3j4n','ln23jk4n2njknn2n'];
var array2=[{水果:“香蕉”,产地:“佛罗里达”,id:“j2n4k2j3n42k3j4n”},
{果实:“桃”,原产地:“格鲁吉亚”,id:“l2nkj2n3k4bj”};
const checkIncludes=(a1,a2)=>a1.every(s=>a2.some({id}=>s==id));
console.log(检查包括(array1,array2));//false-->因为一个匹配,一个不匹配。

log(检查包括([“j2n4k2j3n42k3j4n”],array2));//true-->因为其中一个匹配
,所以您还可以将
array1
转换为Set的实例,以将复杂性从
O(M x N)
降低到
O(N)
。我删除了注释:)为什么
布尔(array2.find(item=>item.id==id))
?它只相当于
array2。一些(item=>item.id==id)
Boolean不是必需的。删除,最初我使用了不同的方法。为什么不使用
array2.some(item=>item.id==id)
而不是
Boolean(array2.find(item=>item.id==id))
@kiranvj@Phong我们可以使用
一些
,这样会更好choice@Phong@VLAZ感谢您的建议,更新了答案。这是错误的。它甚至无法运行,更不用说产生正确的结果了。为什么人们要投票呢?嘿,尼克和Phong抱歉,他们有几个打字错误和愚蠢的失误。修正了,这是我测试的样本,效果很好。谢谢你指出