如何仅按名称属性过滤对象数组? - Javascript

时间:2021-04-09 15:55:27

标签: javascript

我有一个名为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)

我错过了什么?

4 个答案:

答案 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)

您想要使用的是 mapreduce 也可以完成这项工作。要详细了解在 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)