我有一个名为movies的对象数组,我想创建一个仅使用name属性的新数组,我使用了forEach方法,但我需要使用filter方法:
过滤方法的预期输出:
['勇敢者游戏'、'哈利P'、'玩具总动员']
let movies = [
{
'name': 'Jumanji',
'duration': 120
},
{
'name': 'Harry P',
'duration': 60
},
{
'name': 'Toy Story',
'duration': 240
}
];
let movies_names = [];
movies.forEach(movie => {
movies_names.push(movie.name);
});
console.log('movies_names', movies_names)
使用过滤器方法,我可以看到名称,但是当我返回它们时,我看到的是原始数组。
let movies = [
{
'name': 'Jumanji',
'duration': 120
},
{
'name': 'Harry P',
'duration': 60
},
{
'name': 'Toy Story',
'duration': 240
}
];
let newAr = movies.filter((item, index, arr) => {
console.log('item', item.name)
return item.name
// console.log('index', index)
// console.log('arr', arr.name)
})
console.log('newAr', newAr)
我错过了什么?
答案 0 :(得分:2)
Array.filter
将过滤数组以删除不需要的项目,您正在寻找 Array.map 以保持相同的数组长度改变数组的每个元素的值:
let movies = [{
'name': 'Jumanji',
'duration': 120
},
{
'name': 'Harry P',
'duration': 60
},
{
'name': 'Toy Story',
'duration': 240
}
];
let newAr = movies.map((item, index, arr) => {
return item.name
})
console.log('newAr', newAr)
答案 1 :(得分:1)
您想要使用的是 map
但 reduce
也可以完成这项工作。要详细了解在 checkout this post
let movies = [
{
'name': 'Jumanji',
'duration': 120
},
{
'name': 'Harry P',
'duration': 60
},
{
'name': 'Toy Story',
'duration': 240
}
];
const newMoviesArrUsingMap = movies.map(cur => cur.name);
const newMoviesArrUsingReduce = movies.reduce((acc,cur) => [...acc, cur.name], []);
console.log(newMoviesArrUsingMap);
console.log(newMoviesArrUsingReduce);
答案 2 :(得分:0)
试试这个:
let movies = [
{
'name': 'Jumanji',
'duration': 120
},
{
'name': 'Harry P',
'duration': 60
},
{
'name': 'Toy Story',
'duration': 240
}
];
movies_names = movies.map(movie=>movie.name)
console.log(movies_names)
答案 3 :(得分:0)
这个问题适合地图方法:Map W3Schools doc
let movies = [
{
'name': 'Jumanji',
'duration': 120
},
{
'name': 'Harry P',
'duration': 60
},
{
'name': 'Toy Story',
'duration': 240
}
];
let newAr = movies.map(item => item.name)
console.log(newAr)