JavaScript中获取数组对象内value数组长度的问题排查
问题分析与解决
你的代码中value返回undefined是因为两个核心错误:
- 用
for...in遍历数组时,循环变量key是数组的索引(如0、1),并非目标对象里的key属性,导致生成的结果中key值不符合预期。 message[key]是数组中的单个对象,对象本身没有length属性,你需要访问对象的value属性(这才是存储数据的数组),再获取它的length。
修正方案1:使用map方法(推荐)
map方法可以直接遍历数组并转换元素,一步得到目标结果:
var message = [ { "key": "a5a5E0000003uzTQAQ", "value": [{"Name": "Features1"}] }, { "key": "a5a5E0000003uzYQAQ", "value": [ {"Name": "AEO Analysis - Engagement"}, {"Name": "AEO Analysis - Engagement 1"} ] } ] const noOfFields = message.map(item => ({ key: item.key, value: item.value.length })) console.log(noOfFields)
修正方案2:使用forEach循环(贴近你的原始思路)
如果更习惯手动收集结果,可以用forEach遍历数组元素:
var message = [ { "key": "a5a5E0000003uzTQAQ", "value": [{"Name": "Features1"}] }, { "key": "a5a5E0000003uzYQAQ", "value": [ {"Name": "AEO Analysis - Engagement"}, {"Name": "AEO Analysis - Engagement 1"} ] } ] let noOfFields = [] message.forEach(item => { noOfFields.push({ key: item.key, value: item.value.length }) }) console.log(noOfFields)
补充说明
for...in主要用于遍历对象的可枚举属性,虽然能遍历数组,但会拿到索引字符串,还可能意外遍历到数组原型链上的自定义属性,因此遍历数组优先使用forEach、map、for...of这类更安全的方法。
内容的提问来源于stack exchange,提问作者learnjqueery
相关产品推荐
相关产品推荐

