Инвертировать ключи объекта с массивом значений - PullRequest
1 голос
/ 25 марта 2020

Я работаю над проблемой программирования. Мне нужно инвертировать этот объект:

{
   apple: [40, 49],
   orange: [20, 21],
   pear: [2, 50, 19]
}

, чтобы получить как

{
   40: "apple",
   49: "apple",
   20: "orange",
   21: "orange",
   2: "pear",
   50: "pear",
   19: "pear",
}

Это довольно легко сделать с for-l oop, но одно из правил проблема не в циклах for или дополнительных библиотеках.

Вот мое решение с использованием циклов for, возможно ли это сделать без использования for-l oop:

var temp = {}
for (var key in fruit) {
    for (var i in fruit[key]) {
        temp[fruit[key][i]] = key;
    }
}
console.log(temp);

Ответы [ 2 ]

1 голос
/ 25 марта 2020
  const temp = Object.fromEntries(Object.entries(fruit).flatMap(([k, vs]) => vs.map(v => [v, k])));

Это тоже в основном циклы, просто более неясные.

1 голос
/ 25 марта 2020

Вы можете попробовать использовать array.reduce и Object.entries :

let input = {
   apple: [40, 49],
   orange: [20, 21],
   pear: [2, 50, 19]
};

let result = Object.entries(input).reduce((acc, current) => {
    let [k,v] = current;
    v.forEach(val => acc[val] = k);
    return acc;
}, {})

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