Фильтр массива объектов возвращает пустой массив - PullRequest
0 голосов
/ 11 мая 2018

У меня есть следующий массив объектов:

arr = [
    {
        name: "john",
        age: 24,
        gender: "male"
    },
    {
        name: "jane",
        age: 27,
        gender: "female"
    },
    {
        name: "joe",
        age: 29,
        gender: "male"
    }
]

Я пытаюсь отфильтровать свойства name и age в новый массив.Я пробовал это:

const newFields = arr.filter((item) => {
    return (
        item.name && item.age
    );
});

Но по какой-то причине newFields возвращает пустой массив.

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Это может быть также один вкладыш с функцией стрелки и Соответствие контекста параметра

const newFields = arr.map(({ name, age }) => ({ name, age }));

Результат вашего решения не может быть пустым, кроме исходного массива, потому что в этом случае возвращаемое значение вашей функции filter будет всегда истинным (каждый элемент имеет свойство name и age), которое ничего не фильтрует из оригинал arr переменная.

0 голосов
/ 11 мая 2018

Вместо .filter() используйте .map()

const arr = [
  {
    name: "john",
    age: 24,
    gender: "male"
  },
  {
    name: "jane",
    age: 27,
    gender: "female"
  },
  {
    name: "joe",
    age: 29,
    gender: "male"
  }
];

const newFields = arr.map(item => {
  return {
      name: item.name,
      age: item.age
    }
});
console.log(newFields)
0 голосов
/ 11 мая 2018

Если вы создаете новый массив с подмножеством оригинала - тогда вы можете перебирать массив и помещать нужные элементы в его собственный массив.

Тем не менее, если все, что вы пытаетесь получить, это имя и возраст существующего массива - зачем вам создавать отдельный массив? - вы можете просто перебирать исходный массив и ссылаться только на нужные значения из каждого элемента.

let arr = [
    {
        name: "john",
        age: 24,
        gender: "male"
    },
    {
        name: "jane",
        age: 27,
        gender: "female"
    },
    {
        name: "joe",
        age: 29,
        gender: "male"
    }
]

let newArr = [];

arr.forEach(function(item) {
    newArr.push({name:item.name, age:item.age})
});

console.log(newArr); // gives [{"name": "john","age": 24},{"name": "jane","age": 27},{"name": "joe","age": 29}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...