如何在JavaScript中查询Payload数组,捕获指定name对应的attributes.value?
在JavaScript中从payload的attributes数组中获取指定项的value
下面提供几种可行的方案,根据你的需求选择:
1. 单次查找:使用Array.find()
如果只是偶尔查找一次,直接用find()方法匹配目标字段即可。
根据handle字段查找(对应你举例的email、fname等)
const payload = { attributes: [ { handle: 'email', name: 'Email', value: 'john.doe@gmail.com' }, { handle: 'fname', name: 'First Name', value: 'John' }, { handle: 'lname', name: 'Last Name', value: 'Doe' }, { handle: 'zip', name: 'Postal Code', value: '45383' } ], status: [ { group: 'student', school: 'UCF' } ] }; function getValueByHandle(targetHandle) { const matchedAttr = payload.attributes.find(item => item.handle === targetHandle); // 找不到则返回undefined,也可以自定义默认值 return matchedAttr ? matchedAttr.value : undefined; } // 使用示例 console.log(getValueByHandle('email')); // 输出: john.doe@gmail.com console.log(getValueByHandle('lname')); // 输出: Doe
根据name字段查找(比如'Email'、'First Name')
如果你实际需要匹配的是name字段的全称,用下面的写法:
function getValueByName(targetName) { const matchedAttr = payload.attributes.find(item => item.name === targetName); return matchedAttr ? matchedAttr.value : undefined; } console.log(getValueByName('Postal Code')); // 输出: 45383
2. 多次查找:转成映射对象提升效率
如果需要频繁查找,先把attributes数组转换成键值对对象,后续查找会更高效:
// 生成以handle为键的映射 const attrMapByHandle = payload.attributes.reduce((acc, item) => { acc[item.handle] = item.value; return acc; }, {}); // 直接通过键访问 console.log(attrMapByHandle.fname); // 输出: John console.log(attrMapByHandle.zip); // 输出: 45383 // 生成以name为键的映射(可选) const attrMapByName = payload.attributes.reduce((acc, item) => { acc[item.name] = item.value; return acc; }, {}); console.log(attrMapByName['Last Name']); // 输出: Doe
内容的提问来源于stack exchange,提问作者Ryan Friess
相关产品推荐
相关产品推荐

