JavaScript对象数组:结果疑问解析及添加isInvalid属性实现
问题解答:数组遍历结果分析与属性添加需求
一、当前输出结果的原因
你的代码中使用了 arr.map(group => group.values.every(val => val.id)),拆解逻辑如下:
every()方法会检测数组所有元素是否满足指定条件,仅当全部元素通过测试时返回true,否则返回false。- JavaScript 中,
val.id会被当作布尔值判断:若属性不存在则为undefined(属于 falsy 值);若存在且为非空字符串则为 truthy 值。
对应每个分组的结果:
- Attestation Component 1:
values数组内所有对象都没有id属性,val.id全为undefined,every()返回false。 - Attestation Component 2 和 Attestation Component 3:
values数组内每个对象都有非空id属性,every()检测全部通过,返回true。
这就是控制台输出 [false, true, true]的原因。
二、添加 isInvalid 属性的实现
根据需求,给每个分组对象添加 isInvalid 属性:当分组存在至少一个无 id 的元素时,isInvalid 为 true,否则为 false(与 every(val => val.id) 的结果相反)。
修改后的代码如下:
const arr = [ { "name": "Attestation Component 1", "values": [ { "component": "Attestation Component 1" }, { "component": "Attestation Component 1" }, { "component": "Attestation Component 1" } ] }, { "name": "Attestation Component 2", "values": [ { "id": "10005884", "url": "https://www.msn.com", "bfaId": "G44.5.3.1N/A", "component": "Attestation Component 2" }, { "id": "10005883", "url": "https://www.hotmail.com", "bfaId": "G44.5.3.2N/A", "component": "Attestation Component 2" } ] }, { "name": "Attestation Component 3", "values": [ { "id": "10005882", "url": "https://www.rediffmail.com", "bfaId": "G44.5.3.3N/A", "component": "Attestation Component 3" } ] } ]; // 给每个分组添加 isInvalid 属性 arr.forEach(group => { const hasMissingId = !group.values.every(val => val.id); group.isInvalid = hasMissingId; }); console.log(arr);
修改后输出的结构示例:
[ { name: 'Attestation Component 1', values: [...], isInvalid: true }, { name: 'Attestation Component 2', values: [...], isInvalid: false }, { name: 'Attestation Component 3', values: [...], isInvalid: false } ]
内容的提问来源于stack exchange,提问作者Kiara
相关产品推荐
相关产品推荐

