Javascript - Обходной путь для плоской карты - PullRequest
0 голосов
/ 06 апреля 2020

Итак, я искал обходной путь для плоской карты, поскольку она не работает на IE, и я нашел это: Но я не очень понимаю, почему она работает

var gadjets = [
  {computers:['asus', 'hp'],
  sellphones:['Galaxy', 'Nokia']
  },

  {computers:['dell', 'insys'],
  sellphones:['iphone', 'samsung']
  }
];

const getValues = gadjets.reduce((acc, gadjet) => acc.concat(gadjet[computers]), []) // instead of gadjets.flatMap(gadjet=> gadjet[computers])

Это код возвращает:

['asus','hp','dell','insys']

Но не должен ли он вернуться:

['asus','hp'],['dell', 'insys']

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

Но не должен ли он вернуться

Я не уверен, что вы пытаетесь показать нам там, но если вы имеете в виду

[['asus','hp'],['dell', 'insys']]

, тогда нет, не должно concat выравнивает массивы, которые вы передаете (на один уровень):

const a = [].concat(['asus','hp'], ['dell', 'insys']);
console.log(a); // ["asus", "hp", "dell", "insys"]

Итак, acc.concat(gadjet[computers]) объединяет каждый из этих computers массивов в новый массив, который является результатом накопления reduce.

0 голосов
/ 06 апреля 2020

В случае, если вы хотите, чтобы вывод был массивом массивов. Попробуй это:

var gadjets = [
  { computers: ["asus", "hp"], sellphones: ["Galaxy", "Nokia"] },
  { computers: ["dell", "insys"], sellphones: ["iphone", "samsung"] }
];
const groupBy = key => {
  let res = gadjets.reduce((objectsByKeyValue, obj) => {
               let arr = [];
               arr.push(obj[key]);
               return objectsByKeyValue.concat(arr);
        }, []);
   return res;
};
console.log(groupBy("computers"));
0 голосов
/ 06 апреля 2020

Это потому, что reduce складывает элементы, которые вы ему даете. Например, возьмите следующий код:

let arr = [1,2,3,4,5];
console.log(arr.reduce((before, value)=>before+value));

Этот код берет каждый value и добавляет его к before. Затем он передает это добавленное значение в следующую итерацию reduce в переменной before.

В вашем коде вы передавали массив в before или в вашем случае acc, объединяли (объединяли) новый массив из gadgets['computers'] и возвращали этот массив , Это создает список компьютеров из массива объектов.

Подробнее о reduce здесь .

...