如何使用JavaScript检查对象数组中指定属性值是否全部相同
检查对象数组中所有对象的cid属性值是否全部相同
需求说明
检查对象数组中所有对象的cid属性值是否全部相同,若是则返回true。注意:cid的取值不固定,示例中的109可能会变化。
尝试的代码
var arrobj = [{"cid":109,"aid":220},{"cid":109,"aid":221}] // I Tried const result = arrobj.every(e => e.cid); console.log(result)
问题分析
你当前的代码逻辑不符合需求:arrobj.every(e => e.cid)仅判断数组里每个对象的cid属性是否存在且值为“真值”(比如非0、非空字符串等),并没有校验所有cid的取值是否完全一致。哪怕数组里存在不同的cid值,只要它们都是真值,代码依然会返回true。
正确解法
解法一:以第一个元素的cid为基准对比
取数组第一个元素的cid作为参照,用every方法校验所有元素的cid是否和这个基准值一致:
var arrobj = [{"cid":109,"aid":220},{"cid":109,"aid":221}]; // 处理空数组的情况(可根据业务需求调整返回值) if (arrobj.length === 0) { console.log(true); // 或false,按需修改 } else { const baseCid = arrobj[0].cid; const result = arrobj.every(item => item.cid === baseCid); console.log(result); // 输出true }
解法二:利用Set去重判断
利用Set自动去重的特性,提取所有cid存入Set后,判断Set的大小是否为1(大小为1说明所有cid都相同):
var arrobj = [{"cid":109,"aid":220},{"cid":109,"aid":221}]; const cidCollection = new Set(arrobj.map(item => item.cid)); const result = cidCollection.size === 1; console.log(result); // 输出true
额外注意事项
- 若数组为空,两种解法的返回值需要根据业务逻辑调整:比如空数组可返回
true(不存在不同的cid)或false(无元素可对比)。 - 如果数组中可能存在没有
cid属性的对象,需要补充属性存在的判断,比如把解法一中的条件修改为:item.hasOwnProperty('cid') && item.cid === baseCid。
内容的提问来源于stack exchange,提问作者learntocode2468
相关产品推荐
相关产品推荐

