使用值数组反转对象键

时间:2020-03-24 23:22:43

标签: javascript ecmascript-6

我正在应对编程挑战。我需要反转该对象:

{
   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循环非常容易,但是挑战的规则之一是没有for循环或其他库。

这是我使用for循环的解决方案,是否可以不使用for循环来做到这一点?

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

2 个答案:

答案 0 :(得分:1)

您可以尝试使用array.reduceObject.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);

答案 1 :(得分:1)

  const temp = Object.fromEntries(Object.entries(fruit).flatMap(([k, vs]) => vs.map(v => [v, k])));

这基本上也是循环的,只是更加晦涩。