Javascript 检查对象数组的键/值对的简明方法?
如果下面数组中的每一个字符串都存在于数组中某个对象的某个id中,那么有什么简单明了的方法可以找到?我知道我可以执行for循环,但如果我运行多个查找,它会变得很乏味 以下示例应输出false,因为一个匹配,一个不匹配。Javascript 检查对象数组的键/值对的简明方法?,javascript,arrays,filter,Javascript,Arrays,Filter,如果下面数组中的每一个字符串都存在于数组中某个对象的某个id中,那么有什么简单明了的方法可以找到?我知道我可以执行for循环,但如果我运行多个查找,它会变得很乏味 以下示例应输出false,因为一个匹配,一个不匹配。 var array1= [ 'j2n4k2j3n42k3j4n', 'ln23jk4n2njknn2n' ] var array2 = [ { fruit:"banana" origin:"florida&q
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抱歉,他们有几个打字错误和愚蠢的失误。修正了,这是我测试的样本,效果很好。谢谢你指出