我有2个JSON对象,一个是字符串数组,另一个是对象数组。我想检查对象数组中是否存在字符串数组中的值,如果存在,则在对象数组中设置特定值。
即:给定以下对象数组
### Object Array before
[{
name: 'ABCDE',
value: 'abcde',
checked: false
},
{
name: 'FGHIJ',
value: 'fghij',
checked: false
},
{
name: 'KLMNO'
value: 'klmno'
checked: false
}]
并给出以下字符串数组:
[ 'fghij', 'klmno' ]
结果应如下:
### Object Array after
[{
name: 'ABCDE',
value: 'abcde',
checked: false
},
{
name: 'FGHIJ',
value: 'fghij',
checked: true
},
{
name: 'KLMNO'
value: 'klmno'
checked: true
}]
答案 0 :(得分:2)
像
这样的东西 arr.map( v => Object.assign(v, {checked: stringArray.indexOf(v.value) !== -1 }))
arr
是原始数组,stringArray
包含['fghij','klmno']
如果您不想修改原始数组,请将assign
调用更改为Object.assign({}, v, {checked: stringArray.indexOf(v.value) !== -1 })
答案 1 :(得分:0)
出于代码清晰度和性能原因,我建议收集ES6 Set
对象中的值。
基本上你有两个选择:修改数组或复制数组。两个例子:
const data = [{
name: 'ABCDE',
value: 'abcde',
checked: false
}, {
name: 'FGHIJ',
value: 'fghij',
checked: false
}, {
name: 'KLMNO',
value: 'klmno',
checked: false
}];
const toCheck = [ 'fghij', 'klmno' ];
const toCheckSet = new Set(toCheck);
// copying the data
const newData = data.map(obj => ({
name: obj.name,
value: obj.value,
checked: toCheckSet.has(obj.value)
}));
console.log(newData);
// altering in place:
data.forEach(obj => { obj.checked = toCheckSet.has(obj.value); })
console.log(data);