JavaScript中从对象数组提取用户名称至字符串新数组的实现问题
问题分析与修正
你的代码存在几个关键问题,导致无法正确提取用户名称:
- 属性检查写法错误:
names.hasOwnProperty[name]是错误用法,要检查当前遍历的对象是否包含name属性,应该针对names[i]调用hasOwnProperty方法,正确写法是names[i].hasOwnProperty('name')(注意方法要加括号,参数是字符串形式的属性名)。 - 属性访问错误:
names[name]无法获取当前对象的name属性,你需要访问循环中的当前对象names[i]的name属性,即names[i].name。 - 冗余判断(可选):如果能确定输入数组的每个元素都包含
name属性,这个判断可以省略,直接提取属性即可。
修正后的基础循环版本
function getNames(names) { let newArray = []; for(let i = 0; i < names.length; i++){ // 可选:添加属性存在性检查,避免无name属性的对象导致错误 if(names[i].hasOwnProperty('name')){ newArray.push(names[i].name); } } return newArray; } console.log(getNames([{name: "Pete", age: 35, language: "Javascript"},{name: "John", age: 40, language: "Javascript"}, {name:"Carol", age: 30, language: "Javascript"}]))
更简洁的ES6写法(推荐)
对于这种数组元素转换的场景,使用Array.prototype.map方法会更简洁高效,它专门用于将数组的每个元素映射为新值:
function getNames(names) { // 用可选链操作符做容错处理,避免无name属性的对象返回undefined return names.map(user => user?.name || ''); } console.log(getNames([{name: "Pete", age: 35, language: "Javascript"},{name: "John", age: 40, language: "Javascript"}, {name:"Carol", age: 30, language: "Javascript"}]))
内容的提问来源于stack exchange,提问作者ah1917
相关产品推荐
相关产品推荐

