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; }
Comments
Post a Comment