[英]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
(任何)項目是否與requiredfileds
的item
具有相同的名稱。
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.