如何根据name属性提取数组内对象对应的weight、percentages字段值
按name筛选数组对象对应字段的实现方法
你可以直接用JS数组原生的find()方法实现需求,该方法会遍历数组,返回第一个满足匹配条件的元素,找不到则返回undefined,刚好适配你按唯一name匹配的场景。
实现示例
// 你的state数组(注意原示例里的字符串类型name要加引号,避免语法错误) const stateArr = [ { name: 'bench', weight: 200, percentages: [200, 180, 160] }, { name: 'squat', weight: 300, percentages: [300, 270, 240] } ] // 封装为复用函数,传入要匹配的name即可 function getFieldByName(targetName) { const matchedItem = stateArr.find(item => item.name === targetName) // 兼容name不存在的场景,避免读取字段时报错 if (!matchedItem) return null // 按需返回需要的字段 return { weight: matchedItem.weight, percentages: matchedItem.percentages } } // 测试调用 console.log(getFieldByName('bench')) // 输出结果:{ weight: 200, percentages: [200, 180, 160] }
注意事项
- 如果你的业务场景中可能存在多个相同name的对象,可以把
find()替换为filter(),返回的是所有符合条件的对象组成的数组,再遍历提取对应字段即可 - 读取匹配结果的字段前一定要做非空判断,避免传入不存在的name时触发
Cannot read properties of undefined类报错 - 如果是React/Vue等框架的响应式state数组,直接对state中的数组调用
find()方法即可,逻辑和上述示例完全一致
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

