Получение значений для каждого ключа в JS Object и перенос каждого набора значений для каждого ключа в его собственный массив - PullRequest
1 голос
/ 22 октября 2019

Я хочу перебрать свои пары ключ / значение и перенести все значения для каждого ключа в свой собственный массив. Эти массивы значений каждой клавиши должны быть помещены в один выходной массив.

Я надеюсь, это объясняет то, что я пытаюсь сделать:

Input: map = {"hi":["hello","hey","howdy"],"bye":["Goodbye","Ciao"]}

Output:  output = [["hello","hey","howdy"],["Goodbye","Ciao"]]

Это то, что я имею до сих пор:

return Object.keys(map).reduce((output, key) => {
      return output.push(map[key])
  },[])

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

Для фона это частьпроблема группирования анаграмм, поэтому я заполняю карту следующим образом из предоставленного массива "str" ​​строк.

 let map = {};
  str.forEach(anagram => {
    const sortedWord = anagram
      .split("")
      .sort()
      .join("");
    map[sortedWord] = map[sortedWord] || [];
    map[sortedWord].push(anagram);
  });

Ответы [ 2 ]

4 голосов
/ 22 октября 2019

Все, что вам нужно, это встроенный Object.values():

Object.values() возвращает массив, элементы которого являются перечисляемыми значениями свойств, найденными в объекте.

const map = {"hi":["hello","hey","howdy"],"bye":["Goodbye","Ciao"]};
const output = Object.values(map);

console.log(output);
1 голос
/ 22 октября 2019

Помимо двух вышеупомянутых превосходных ответов, вы можете выбрать Object.entries () , который будет возвращать массив из пары [key, value] входного объекта. Оттуда мы можем вернуть только value в результирующий массив, что даст вам ожидаемый результат.

const input = {"hi":["hello","hey","howdy"],"bye":["Goodbye","Ciao"]}
const result = Object.entries(input).map(item => item[1]);

console.log(result);

Однако учтите, что Object.entries() не поддерживается браузерами Internet Explorer.

В качестве альтернативы вы можете использовать старый добрый для..in оператор для перебора перечислимых свойств объекта с последующим отправкой соответствующих значений в результирующий массив.

const input = {"hi":["hello","hey","howdy"],"bye":["Goodbye","Ciao"]}

const result = []
for (const property in input) {
  result.push(input[property]);
}

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...