[英]Get array of properties from Array of Objects in Java script / Type script
我有以下数组如何获取年龄大于 18 的姓名列表。所以输出应该是: ["Anna", "Bob"]
friends = [{
name: 'Anna',
books: ['Bible', 'Harry Potter'],
age: 21
}, {
name: 'Bob',
books: ['War and peace', 'Romeo and Juliet'],
age: 26
}, {
name: 'Alice',
books: ['The Lord of the Rings', 'The Shining'],
age: 18
}]
我在下面试过
let names = friends.map((item) => {if (item.age > 18){ return item.name}});
但我低于输出
["Anna", "Bob", undefined]
在Array.filter()
之前使用Array.map()
因为map
总是返回一个值,如果你不指定return
语句你会得到undefined
。 对于 3 元素数组,总是会有 3 元素结果。
let friends = [{ name: 'Anna', books: ['Bible', 'Harry Potter'], age: 21 }, { name: 'Bob', books: ['War and peace', 'Romeo and Juliet'], age: 26 }, { name: 'Alice', books: ['The Lord of the Rings', 'The Shining'], age: 18 }] let result = friends.filter(f => f.age > 18).map(f => f.name); console.log(result);
您可以使用Array.prototype.reduce
let friends = [{ name: 'Anna', books: ['Bible', 'Harry Potter'], age: 21 }, { name: 'Bob', books: ['War and peace', 'Romeo and Juliet'], age: 26 }, { name: 'Alice', books: ['The Lord of the Rings', 'The Shining'], age: 18 }]; let ans = friends.reduce((acc, val) => (val.age > 18 && acc.push(val.name),acc), []); console.log(ans);
您将undefined
作为names
数组中的最后一项,因为map
函数用于转换调用它的数组中的每个项,然后返回每个转换后的值。
如果在长度为 3 的数组上调用它, map
函数将返回一个相同长度的数组。 由于您仅从年龄大于 18 的map
函数返回那些年龄大于 18 的名称,最后一个年龄不大于 18 的对象,因此您undefined
对其进行转换并返回其 name 属性,因此您会得到undefined
。
实现预期结果的一种方法是使用filter
函数过滤掉年龄不大于 18 的对象,然后在该过滤后的数组上调用map
函数。
在上述方法中,您的代码将首先迭代friends
数组,然后迭代过滤后的数组。
您可以使用reduce
函数获得所需的结果并仅迭代一次friends
数组
const friends = [{ name: 'Anna', books: ['Bible', 'Harry Potter'], age: 21 }, { name: 'Bob', books: ['War and peace', 'Romeo and Juliet'], age: 26 }, { name: 'Alice', books: ['The Lord of the Rings', 'The Shining'], age: 18 }]; const res = friends.reduce((acc, curr) => (curr.age > 18 && acc.push(curr.name), acc), []); console.log(res);
let friends = [{ name: 'Anna', books: ['Bible', 'Harry Potter'], age: 21 }, { name: 'Bob', books: ['War and peace', 'Romeo and Juliet'], age: 26 }, { name: 'Alice', books: ['The Lord of the Rings', 'The Shining'], age: 18 }]
let ages = friends.filter((friends) => friends.age>18)
let finalResult = ages.map(fun => ages.name)
console.log(finalResult)
使用 Array.filter()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.