簡體   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