Это самый эффективный способ разделить один массив на 2 больше? - PullRequest
1 голос
/ 25 октября 2019

У меня небольшой ментальный блок, но есть ли более эффективный способ создания 2 новых массивов из значений в другом массиве?

Вот мой текущий пример, и пока он работает, ячувствую, что может быть более эффективный метод;

Original Array;

const daily = [
    {event_date: "2019-10-18", listener: 3},
    {event_date: "2019-10-19", listener: 3},
    {event_date: "2019-10-20", listener: 1}
];

Что мне нужно сделать, так это создать 2 новых массива, один со значениями event_date, а другой сlistener значения.

Я использую map для достижения этой цели, вот так;

const dailyLabels = daily.map((data) => {
    return data.event_date;
});
const dailyData = daily.map((data) => {
    return data.listener
});

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

Ответы [ 2 ]

3 голосов
/ 25 октября 2019

Вы можете использовать Array.reduce , поэтому вы выполняете итерацию по длине массива только один раз.

const daily = [
    { event_date: "2019-10-18", listener: 3 },
    { event_date: "2019-10-19", listener: 3 },
    { event_date: "2019-10-20", listener: 1 }
];

const { dailyLabels, dailyData } = daily.reduce(
    (result, { event_date, listener }) => {
        result.dailyLabels.push(event_date);
        result.dailyData.push(listener);

        return result;
    },
    { dailyLabels: [], dailyData: [] }
);

console.log(dailyLabels);
console.log(dailyData);
1 голос
/ 25 октября 2019

Вы можете использовать Array.reduce, чтобы сделать это

daily.reduce((rs, el) => {rs.listeners.push(el.listener); rs.event_dates.push(el.event_date); return rs;}, {event_dates: [], listeners: []})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...