我有两个带有对象的数组
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;
})
})
但是以上方法不起作用,我该如何进行
答案 0 :(得分:4)
请尝试以下操作:通过应用回调函数来filter
requiredfileds
。此回调函数测试results
中的some
(任意)项是否与item
中的requiredfileds
具有相同的名称。
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);
答案 1 :(得分:1)
恕我直言,您可能想要这样的东西:
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)
})
答案 2 :(得分:1)
具有布尔结果值的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));
答案 3 :(得分:0)
const entered = results.map(({ name }) => name);
const missing = requiredFields.filter(({name}) => !entered.includes(name))
答案 4 :(得分:0)
如@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);