javascript - Alternative for _.invert() using underscore library -


i need change existing map swapping keys values , values keys. there duplicate values in map keys cannot use _.invert() of underscore library.

function map() {         return {              'eatables': {                  apple: 'fruits',                  orange: 'fruits',                  guava: 'fruits',                  brinjal: 'vegetables',                  beans: 'vegetables',                  rose: 'flowers',              }         }     }      var reversemap = _.invert(map()['eatables']);  // invert function works distinct values.     console.log (reversemap);  // giving object {fruits: "guava", vegetables: "brinjal",flowers:"rose"} 

but expecting output as

object {fruits: ["apple","orange","guava"], vegetables: ["brinjal","beans"], flowers:"rose"} 

i tried below, stuck how find whether map value distinct or multiple?

   var newobj = invert(map()['eatables']); _.each(newobj, function(key) {     if (array.isarray(key)) {         _.each( key, function(value) {             console.log(value);         });     } else {         console.log("else:"+key);     } });  function invert(srcobj) {     var newobj = {};     _.groupby(srcobj, function(value, key ) {         if (!newobj[value]) newobj[value] = []; //here every thing array, can make string values unique.         newobj[value].push(key);     });     return newobj; } 

let me alternative using underscore library.

you can use function. function uses object.keys generate array containing keys of object passed in input. then, accesses values of original object , use them key in new object. when 2 values map same key, pushes them array.

   function invert(obj) {     var result = {};     var keys = object.keys(obj);     (var = 0, length = keys.length; < length; i++) {         if (result[obj[keys[i]]] instanceof array) {             result[obj[keys[i]]].push(keys[i])         } else if (result[obj[keys[i]]]) {             var temp = result[obj[keys[i]]];             result[obj[keys[i]]] = [temp, keys[i]];         } else {             result[obj[keys[i]]]=keys[i];         }     }     return result; } 

https://jsfiddle.net/6f2ptxgg/1/


Comments