[英]How to group objects with specific key in javaScript
我想按年齡對JavaScript對象進行分組。我的JSON是
var jsonObj=[{"name":"john","age":23},{"name":"mark","age":25},{"name":"jeni","age":21}]`
我想成為這里的小組成績。
[23:{"name":"john","age":23},25:{"name":"mark","age":25},21:{"name":"jeni","age":21}]
請幫助我獲得結果,我嘗試使用map
和filter
,但未獲得結果。
使用Array#reduce對對象進行分組。 因為可以有多個相同年齡的人,所以將他們收集到age屬性下的數組中:
var jsonObj=[{"name":"john","age":23},{"name":"mark","age":25},{"name":"poll","age":23},{"name":"jeni","age":21}]; var result = jsonObj.reduce(function(r, o) { r[o.age] || (r[o.age] = []); // if the age key doesn't exist, set it to be an array r[o.age].push(o); // push the object into the array return r; }, {}); console.log(result);
或花哨的ES6一線版:
var jsonObj=[{"name":"john","age":23},{"name":"mark","age":25},{"name":"poll","age":23},{"name":"jeni","age":21}]; var result = jsonObj.reduce((r, o) => ((r[o.age] || (r[o.age] = [])).push(o), r), {}); console.log(result);
您可以將哈希表作為結果。 然后循環並為新鍵創建新數組。 以后推對象。
var data = [{ name: "john", age: 23 }, { name: "mark", age: 25 }, { name: "poll", age: 23 }, { name: "jeni", age: 21 }], result = {}; data.forEach(o => (result[o.age] = result[o.age] || []).push(o)); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
您可以使用下划線js解決此問題。
首先添加下划線js
<script src='https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js' ></script>
那么您可以簡單地得到結果。
var result=_.indexBy(jsonObj, 'age');
你可以試試 :
var jsonObj = [{ "name": "john", "age": 23 }, { "name": "mark", "age": 25 }, { "name": "poll", "age": 23 }, { "name": "jeni", "age": 21 }];
let result = {};
jsonObj.forEach(item => {
if(result.hasOwnProperty(item.age)) {
let arr = [];
if(Array.isArray(result[item.age])) {
result[item.age].push(item);
} else {
result[item.age] = [result[item.age], item];
}
} else {
result[item.age] = item;
}
});
console.log(result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.