2017-04-19 2 views
-1

Ich habe eine Ausgabe im FormatGruppenobjekte mit Werten als Array von Index

[{"name":"ABC", 
"type":123 
}, 
{"name":"ABC", 
"type":111 
}, 
{"name":"ABC", 
"type":1432 
}, 
{"name":"XYZ", 
    "type":523 
}, 
{"name":"XYZ", 
    "type":52 
}]; 

Ich versuche, eine Gruppierung Objekt mit Indexpositionen von Array zu erstellen

Beispielausgabe:

{ 
"ABC":[0,1,2], 
"XYZ":[3,4] 
} 
+1

Können Sie bitte auch Ihren Code teilen? – Rajesh

Antwort

2

Sie könnten Gruppe durch name und den Index drücken.

var array = [{ name: "ABC", type: 123 }, { name: "ABC", type: 111 }, { name: "ABC", type: 1432 }, { name: "XYZ", type: 523 }, { name: "XYZ", type: 52 }], 
 
    result = array.reduce(function (r, a, i) { 
 
     (r[a.name] = r[a.name] || []).push(i); 
 
     return r; 
 
    }, Object.create(null)); 
 
    
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

Was ist der Unterschied zwischen 'Object.create (null)' oder einfach '{}'? Ist es in diesem Fall besser? – Weedoze

+1

es hängt von der Verwendung ab, wenn man Schlüssel wie Prototypen 'toString' erwartet, würde zum Beispiel ein wirklich leeres Objekt helfen, denn dann wird es iterabel über die eigenen Schlüssel. –

4

Dies kann mit Array#reduce()

var array = [{ 
 
    "name": "ABC", 
 
    "type": 123 
 
    }, 
 
    { 
 
    "name": "ABC", 
 
    "type": 111 
 
    }, 
 
    { 
 
    "name": "ABC", 
 
    "type": 1432 
 
    }, 
 
    { 
 
    "name": "XYZ", 
 
    "type": 523 
 
    }, 
 
    { 
 
    "name": "XYZ", 
 
    "type": 52 
 
    } 
 
]; 
 

 
var groups = array.reduce((o,a,i)=>{ 
 
    o[a.name]=o[a.name]||[]; 
 
    o[a.name].push(i); 
 
    return o; 
 
}, {}); 
 

 
console.log(groups);
.as-console-wrapper { max-height: 100% !important; top: 0; }
durchgeführt werden

In einem Einzeiler haben Sie

var groups = array.reduce((o,a,i)=>(o[a.name]=o[a.name]||[],o[a.name].push(i),o),{}); 
0

Hier gehen Sie:

var newObj=[]; 
var digitArray=[]; 
var myObj=[{"name":"ABC", 
"type":123 
}, 
{"name":"ABC", 
"type":111 
}, 
{"name":"ABC", 
"type":1432 
}, 
{"name":"XYZ", 
"type":523 
}, 
{"name":"XYZ", 
"type":52 
}]; 
for (var i=0; i<=myObj.length-1; i++){ 
    digitArray = (""+myObj[i].type).split(""); 
    newObj[myObj[i].name]=digitArray; 
} 
console.log(newObj); 

https://jsfiddle.net/9jd9rdgg/

+0

Ich war auf der Suche nach einer Antwort mit lodash, Karte oder reduzieren. Mehr von einem Lernen excerise, also akzeptiere die andere Antwort. – mayankbatra

Verwandte Themen