如何编写适配不同字段名对象数组的JS元素查找函数
解决方案
你可以在函数内先预设所有可能出现的姓名字段集合,遍历每个数组元素时优先取存在的字段值即可,不需要改动外部调用逻辑,兼容所有现有数组结构:
修改后的函数代码如下:
// 预设所有可能的姓名字段,可按实际使用优先级调整排序 const NAME_FIELDS = ['fullName', 'Name', 'sName', 'sameName'] function findNameInArray(arr, name, n) { let names = arr.map(el => { // 匹配当前元素存在的姓名字段 const nameKey = NAME_FIELDS.find(key => el.hasOwnProperty(key)) // 沿用原有的拼接逻辑生成比对值 return `${el[nameKey]}.${n}` }) const num = names.indexOf(name) // 未匹配到返回undefined,和原函数逻辑保持一致 return num >= 0 ? arr[num] : undefined }
验证测试
用你提供的4个数组可直接测试功能正常:
// 测试Array1,查找匹配name1.1的元素 console.log(findNameInArray(Array1, 'name1.1', 1)) // 输出:{fullName:"name1",snumber:1} // 测试Array2,查找匹配name2.2的元素 console.log(findNameInArray(Array2, 'name2.2', 2)) // 输出:{Name:"name2",number:2}
后续如果新增其他姓名字段,只需要往NAME_FIELDS数组里追加对应字段名即可,不需要修改核心逻辑。
内容的提问来源于stack exchange,提问作者Nima Azii
相关产品推荐
相关产品推荐

