Invert key value in js object
Topics related to client-side programming language.
Post questions and answers about JavaScript, Ajax, or jQuery codes and scripts.
-
Marius
- Posts:107
Invert key value in js object
I can't figure out how I can change the following object in JavaScript:
Code: Select all
{"first":["de"], "second":["ab","de"], "third":["de"]}
to:
Code: Select all
{"de":["first", "second", "third"], "ab":["second"]}
I want to associate unique values with list of containing keys in a JavaScript object.
Here is what I have tried:
Code: Select all
const data = {
"first":["de"],
"second":["ab","de"],
"third":["de"]
}
console.log(
Object
.keys(data).reduce(function(obj, key) {
obj[data[key]] = key;
return obj;
}, {})
)
Admin
Posts:805
You have to loop the array and for each item in the array check if an array for that value exists in the accumulator or not before adding it:
Code: Select all
const data = {
"first":["de"],
"second":["ab","de"],
"third":["de"]
}
let result = Object.entries(data).reduce((acc, [key, arr]) => { // for each key-array of the original object
arr.forEach(value => { // for each value in the array
acc[value] = acc[value] || []; // create an array in the output object if it doesn't already exist
acc[value].push(key); // push the key to it
});
return acc;
}, {});
console.log(result);
I also used
Object.entries with each entry desctuctured as
[key, arr] so I don't have to use the extra [key] to get the array while using
Object.keys.