如何判断数组中所有对象的指定属性值是否相同并返回该值
如何判断数组中所有对象的指定属性值相同并返回该值
问题场景
我有如下JavaScript数组示例:
var a = [ { "Procedure_Code": "TKRRevision4" }, { "Procedure_Code": "TKRRevision4" }, { "Procedure_Code": "TKRRevision4" } ] var b = [ { "Procedure_Code": "TKRRevision4" }, { "Procedure_Code": "TKRRevision3" }, { "Procedure_Code": "TKRRevision4" } ]
我想实现:当数组中所有对象的Procedure_Code值都相同时,返回该值;如果存在不同的值,就返回undefined或者其他自定义标识。找了很久类似问题没找到,求解决方法!
解决方案
这里有几种简洁实用的实现方式,你可以根据需求选择:
方法一:用every()方法做一致性校验
every()方法会遍历数组,判断所有元素是否符合指定条件。我们可以拿数组第一个元素的Procedure_Code作为基准,检查其余元素是否都和它一致:
function getSameProcedureCode(arr) { // 处理空数组,避免后续访问arr[0]报错 if (arr.length === 0) return undefined; // 取第一个元素的代码作为基准值 const targetCode = arr[0].Procedure_Code; // 检查所有元素的代码是否等于基准值 const allMatch = arr.every(item => item.Procedure_Code === targetCode); return allMatch ? targetCode : undefined; } // 测试示例 console.log(getSameProcedureCode(a)); // 输出: TKRRevision4 console.log(getSameProcedureCode(b)); // 输出: undefined
方法二:利用Set去重判断
Set会自动剔除重复值,我们可以把数组中所有Procedure_Code提取出来存入Set,如果Set的长度为1,说明所有值都相同:
function getSameProcedureCode(arr) { if (arr.length === 0) return undefined; const codeCollection = new Set(arr.map(item => item.Procedure_Code)); return codeCollection.size === 1 ? codeCollection.values().next().value : undefined; } // 测试示例 console.log(getSameProcedureCode(a)); // 输出: TKRRevision4 console.log(getSameProcedureCode(b)); // 输出: undefined
额外注意点
- 如果数组中可能存在没有
Procedure_Code属性的对象,建议在判断时加上属性存在性校验,比如在every()里写item.hasOwnProperty('Procedure_Code') && item.Procedure_Code === targetCode,防止出现undefined对比的问题; - 如果需要在值不同时返回自定义提示(比如字符串
"存在不同的手术代码"),直接修改return语句里的替代值即可。
内容的提问来源于stack exchange,提问作者flix
相关产品推荐
相关产品推荐

