2017-04-19 33 views
-1

的陣列組對象我在與值作爲索引

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

我想創建與數組的索引位置的分組對象的格式的輸出

示例輸出:

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

能否請您分享您的代碼呢? – Rajesh

回答

2

你可以組由它和name推動指數。

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

'Object.create(null)'或簡單的'{}'有什麼區別?在這種情況下更好嗎? – Weedoze

+1

它取決於使用,如果你期望有像'toString'這樣的原型的鍵,那麼真正的空對象將會有所幫助,因爲這樣它就會在自己的鍵上進行迭代。 –

4

這可以用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; }

在一個班輪你將有

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

在這裏你去:

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

我正在尋找使用lodash,map或reduce的答案。更多的是學習,所以接受其他答案。 – mayankbatra