Javascript уменьшает до массива желаний, используя сокращение и соответствие

у меня есть массив списков

const List = [
{id:1, name:"jack", sex:"male", age:23},
{id:2, name:"marry", sex:"female", age:18},
{id:3, name:"paul", sex:"male", age:12},
{id:4, name:"katty", sex:"female", age:20}
]

Я хочу уменьшить массив только до [23,18,12,20]

Я пытаюсь использовать сокращение и накопление

const newList = List.reduce(
 (acc, {age}) =>{
  acc = age 
  return acc
  },[]}

тогда результат показывает только последний возраст, а не накопительный, не уверен, что это лучший способ сделать.


person Jonas Lu    schedule 04.07.2020    source источник
comment
Использование map() было бы проще... newList = List.map(({age}) => age)   -  person charlietfl    schedule 04.07.2020
comment
На самом деле вы можете сделать это, используя Array.prototype.map.   -  person fubar    schedule 04.07.2020


Ответы (4)


то, что вы хотите, это map, а не reduce

const ages = List.map(item => item.age)
person Ali Hassan    schedule 04.07.2020

Используйте Array#push, чтобы добавить элемент к массиву. acc = age каждый раз только сбрасывает аккумулятор.

const List = [
{id:1, name:"jack", sex:"male", age:23},
{id:2, name:"marry", sex:"female", age:18},
{id:3, name:"paul", sex:"male", age:12},
{id:4, name:"katty", sex:"female", age:20}
]
const newList = List.reduce(
 (acc, {age}) =>{
  acc.push(age)
  return acc
  },[]);
console.log(newList);

Это также можно сделать проще, используя Array#map< /a>, который создает новый массив путем преобразования каждого элемента массива в возвращаемое значение обратного вызова, которому передается элемент.

const List = [
{id:1, name:"jack", sex:"male", age:23},
{id:2, name:"marry", sex:"female", age:18},
{id:3, name:"paul", sex:"male", age:12},
{id:4, name:"katty", sex:"female", age:20}
];
const res = List.map(({age})=>age);
console.log(res);

person Unmitigated    schedule 04.07.2020

Хотя map() проще, если вы действительно хотите использовать сокращение, вы можете использовать синтаксис расширения, чтобы вернуть новый массив или вернуть acc.concat(age)

const List = [
{id:1, name:"jack", sex:"male", age:23},
{id:2, name:"marry", sex:"female", age:18},
{id:3, name:"paul", sex:"male", age:12},
{id:4, name:"katty", sex:"female", age:20}
]
const newList = List.reduce((acc, {age}) => [...acc, age], []);
// OR
const list2 = List.reduce((acc, {age}) => acc.concat(age), []);
   
console.log(newList);
console.log(list2);

person charlietfl    schedule 04.07.2020

Просто добавьте .push(age) в List.reduce

const List = [
{id:1, name:"jack", sex:"male", age:23},
{id:2, name:"marry", sex:"female", age:18},
{id:3, name:"paul", sex:"male", age:12},
{id:4, name:"katty", sex:"female", age:20}
];

 let myNewData = new Array();
 const newList = List.reduce(
 (acc, {age}) =>{
   myNewData.push(age);
  return myNewData;
  },{});
   
alert(newList);

person GMK Hussain    schedule 04.07.2020