** 查找并返回数组中对象的特定属性值**
题目:编写一个函数,该函数接受两个参数:一个对象数组和一个属性名(作为字符串)。函数应该遍历数组中的每个对象,查找并返回所有对象在该属性名下的值组成的数组。如果某个对象不包含该属性,则忽略该对象。
提示:你可以使用map()方法来遍历数组,并使用箭头函数来简化代码。同时,可以使用逻辑与操作符(&&)来安全地访问对象属性,避免undefined错误。
function getPropertyValues(objects, propertyName) {
// 使用 map 方法遍历数组,并使用箭头函数提取属性值
// 如果对象包含该属性,则返回属性值,否则返回 undefined(但随后会被 filter 过滤掉)
// 然后使用 filter 方法过滤掉所有 undefined 值
return objects
.map(obj => obj.hasOwnProperty(propertyName) ? obj[propertyName] : undefined)
.filter(value => value !== undefined);
// 或者,更简洁但可能稍难理解的方式,直接在 map 中使用逻辑与操作来避免返回 undefined
// 但这样就需要在 map 调用后使用 filter 去除 null 或 undefined(如果可能的话)
/*
return objects
.map(obj => obj.hasOwnProperty(propertyName) && obj[propertyName])
.filter(value => value !== null && value !== undefined); // 注意:这里通常不需要检查 null,除非属性值可能为 null
// 但由于我们使用了逻辑与操作,且 obj[propertyName] 不会是 null(除非属性本身就是 null),所以只需要检查 undefined
// 简化后:
.filter(Boolean); // Boolean 函数会将 falsy 值(如 null, undefined, 0, '', false, NaN)过滤掉
*/
}
// 示例
const people = [
{ name: 'Alice', age: 30 },
{ name: 'Bob', hobby: 'swimming' },
{ name: 'Charlie', age: 35, hobby: 'reading' },
{ occupation: 'engineer' }
];
console.log(getPropertyValues(people, 'age')); // 输出: [30, 35]
console.log(getPropertyValues(people, 'hobby')); // 输出: ['swimming', 'reading']
console.log(getPropertyValues(people, 'name')); // 输出: ['Alice', 'Bob', 'Charlie']
console.log(getPropertyValues(people, 'occupation')); // 输出: ['engineer']