繁体   English   中英

Javascript检查对象数组的每个元素是否包含在另一个数组中

[英]Javascript check if each element of an object array is contained in another array

我有两个包含对象的数组

var requiredfileds=[
    {name:'CVR', value:'cvr_code'},
    {name:'NODE POINT VAL', value:'node_point_val'},

 ]

第二个数组

var results = [
    {name:'CVB', data:[12,11,233,445]}
    {name:'CVR', data:[125,1,-45,4]}
   ]

现在我想检查以确保所需字段数组中的所有名称都在结果数组中。 所以从上面两个例子中我认为它是假的并且缺少必需的字段{name:'NODE POINT VAL', value:'node_point_val'},

所以我试过(用es6)

this.is_valid = true;   
this.requiredfields.forEach(field=>{
  this.results.forEach(item=>{
    this.is_valid = item.name === field.name;
  })
})

但上述不起作用,我该如何进行

试试这个:通过应用回调函数filter requiredfileds 此回调函数测试results中的some (任何)项目是否与requiredfiledsitem具有相同的名称。

missing的结果是未满足标准的过滤数组(存在于requiredfileds且在名称中不存在于results数组中的标准)。

如果您只是想知道是否存在缺失值,您可以像这样检查missing数组长度: !!missing.length

 var requiredfileds = [{ name: 'CVR', value: 'cvr_code' }, { name: 'NODE POINT VAL', value: 'node_point_val' }, ]; var results = [{ name: 'CVB', data: [12, 11, 233, 445] }, { name: 'CVR', data: [125, 1, -45, 4] }]; var missing = requiredfileds.filter(item => !results.some(resultItem => resultItem.name === item.name)); console.log('Any missing: ' + !!missing.length); console.log(missing); 

恕我直言,你想要这样的东西:

 var requiredfileds=[ {name:'CVR', value:'cvr_code'}, {name:'NODE POINT VAL', value:'node_point_val'} ] var results = [ {name:'CVB', data:[12,11,233,445]}, {name:'CVR', data:[125,1,-45,4]} ] var resultsNames = results.map(result => result.name) requiredfileds.forEach(requiredfiled => { if(!resultsNames.includes(requiredfiled.name)) console.log(requiredfiled) }) 

带有布尔结果值的ES6单行:

const result = !requiredfileds.some(i => !results.some(j => j.name === i.name));

第一个项目不满足要求的版本:

const badItem = requiredfileds.find(i => !results.some(j => j.name === i.name));

如果您想要一个错误项目数组,请将.find替换为.filter

const badItems = requiredfileds.filter(i => !results.some(j => j.name === i.name));
const entered = results.map(({ name }) => name);

const missing = requiredFields.filter(({name}) => !entered.includes(name))

正如@Barmer建议的......你可以使用Array.every。 与Array.some结合应该可以满足您的需求。

 var requiredFields=[ {name:'CVR', value:'cvr_code'}, {name:'NODE POINT VAL', value:'node_point_val'}, ]; var results = [ {name:'CVB', data:[12,11,233,445]}, {name:'CVR', data:[125,1,-45,4]} ]; const answer = requiredFields.every(item => results.some(test => item.name === test.name)) console.log(answer); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM