Создать новый массив с двумя столбцами из старого массива - PullRequest
10 голосов
/ 21 мая 2019

У меня есть массив следующим образом:

items = [
{"year": 2010, "month": 11, "day":23}
{"year": 2009, "month": 10, "day":15}
{"year": 2009, "month": 10, "day":10} //added after my edit below
]

Я хотел бы создать новый массив только с 2 столбцами, подобными этому:

newArarry = [
{"year": 2010, "month": 11}
{"year": 2009, "month": 10}
]

Прямо сейчас я пытаюсь использовать .map () и он не работает:

const newArray = [];
newArray.map({
    year: items.year,
    month: items.month
});

EDIT

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

Ответы [ 6 ]

6 голосов
/ 21 мая 2019

Прямо сейчас я пытаюсь с .map (), и он не работает

  • Поскольку newArray имеет длину 0, и вы пытаетесь отобразить его
  • карта принимает обратный вызов, но вы передаете объект
  • Не присваивать вывод карты какой-либо переменной

let items = [{"year": 2010, "month": 11, "day":23},{"year": 2009, "month": 10, "day":15}]

let final = items.map(({day,...rest}) => ({...rest}))

console.log(final)
5 голосов
/ 21 мая 2019

Вы не правильно звоните Array#map:

  1. Вам необходимо вызвать массив source : items.
  2. В качестве аргумента необходимо предоставить функцию .
  3. Array#map возвращает новый массив, который является результатом выполнения функции для каждого члена оригиналамассив.

items = [
{"year": 2010, "month": 11, "day":23},
{"year": 2009, "month": 10, "day":15}
]

const newArray = items.map(item => ({
    year: item.year,
    month: item.month
}));

console.log(newArray)

A Отображение операция преобразуется из A в B - в данном случае из {"year": 2010, "month": 11, "day":23} в { "year": 2010, "month": 11 }.Выполнение .map в массиве дает результат операции сопоставления.

3 голосов
/ 21 мая 2019

Array.map() ожидает обратный вызов в качестве первого параметра, он также должен вызываться в исходном массиве - в противном случае вы по сути перебираете пустой массив.

var newArray = items.map(function (item) {
    return {
        year: item.year,
        month: item.month
    };
});

Обновление

Чтобы убедиться, что ваш массив содержит только уникальные значения, а не отображение и фильтрацию, вы можете сделать что-то похожее на следующее:

var items = [
    {year: 2010, month: 11, day: 23},
    {year: 2009, month: 10, day: 15},
    {year: 2009, month: 10, day: 10}
];

var newArray = [];

items.forEach(function (item) {
    var index = newArray.findIndex(function (newItem) {
        return newItem.year === item.year && newItem.month === item.month;
    });

    if (index === -1) {
        newArray.push({ year: item.year, month: item.month });
    }
});

console.log(newArray); // [{ year: 2010, month: 11 }, { year: 2009, month: 10 }]
3 голосов
/ 21 мая 2019

Метод массива .map() принимает обратный вызов, возвращенное значение которого будет использовано для создания нового массива. По ошибке вы передаете ему объект вместо функции. Чтобы это исправить, вы можете использовать .map() с некоторыми объектами разрушения:

const items = [
  {"year": 2010, "month": 11, "day":23},
  {"year": 2009, "month": 10, "day":15}
];

const result = items.map(({ year, month }) => ({year, month}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
2 голосов
/ 21 мая 2019

Вы не используете map правильно - вы также можете упростить с отдыхом, распространением и деструктуризацией:

const items = [{"year": 2010, "month": 11, "day":23},{"year": 2009, "month": 10, "day":15}];
const newArray = items.map(({ day, ...res }) => ({ ...res }));
console.log(newArray);
.as-console-wrapper { max-height: 100% !important; top: auto; }
1 голос
/ 21 мая 2019

Исправьте массив элементов, Массив с несколькими элементами / значениями должен быть разделен запятой

var items = [{"year": 2010, "month": 11, "day":23},
               {"year": 2009, "month": 10, "day":15}]
                    const newArray = [];
                    items.map(i=>{
                    newArray.push({year: i.year, month: i.month});
                    });
                  console.log(newArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...