JavaScript如何将单属性对象数组转换为属性值组成的数组
问题原因
你使用Object.values(arr)没有得到预期结果,是因为Object.values()的作用是提取传入对象本身的所有可枚举属性值。你传入的arr是数组类型,它的可枚举属性就是每个索引对应的元素——也就是你定义的6个带name属性的对象,所以执行后返回的仍然是原对象数组,不会深入到每个对象内部提取name属性值。
正确实现方案
最简洁、语义化的实现方式是使用数组原生的map()方法,该方法会遍历原数组每一项,根据回调函数的返回值组装成新数组,不会修改原数组:
let arr = [ { name: 'AAA' }, { name: 'BBB' }, { name: 'CCC' }, { name: 'DDD' }, { name: 'EEE' }, { name: 'FFF' } ]; const new_arr = arr.map(item => item.name);
执行上述代码后,new_arr就是你期望的结果:['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF']。
其他可选写法
- 适配不支持ES6箭头函数的老旧环境:
var new_arr = arr.map(function(item) { return item.name; });
- 基础for循环实现(无ES5+API依赖,全JS环境兼容):
var new_arr = []; for (var i = 0; i < arr.length; i++) { new_arr.push(arr[i].name); }
内容的提问来源于stack exchange,提问作者ArthurJ
相关产品推荐
相关产品推荐

