Inversare cheie cu valoare in obiect JS

Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
Marius
Mesaje: 60

Inversare cheie cu valoare in obiect JS

Nu imi dau seama cum pot schimba urmatorul obiect in JavaScript:

Cod: Selectaţi tot

{"first":["de"], "second":["ab","de"], "third":["de"]}
In acesta:

Cod: Selectaţi tot

{"de":["first", "second", "third"], "ab":["second"]}
Vreau să asociez valorile unice cu lista de chei in care sunt conținute in obiect JavaScript.
Iată ce am încercat:

Cod: Selectaţi tot

const data = {
  "first":["de"],
  "second":["ab","de"],
  "third":["de"]
}

console.log(
  Object
  .keys(data).reduce(function(obj, key) {
    obj[data[key]] = key;
    return obj;
  }, {})
)

MarPlo
Trebuie să parcurgi array-urile și pentru fiecare element din array verifici dacă există sau nu un array pentru acea valoare în acumulator înainte de a o adăuga:

Cod: Selectaţi tot

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);
Am folosit Object.entries cu fiecare intrare sctructurată ca [key, arr] sa nu se foloseasca un extra [key] ca sa obtin array-ul cand folosesc Object.keys.

Subiecte similare