所以我有以下 JSON 陣列
[
{
"characterID": 0,
"description": "Series 1",
"id": 1,
"seriesID": 0,
"status": "ACCEPTED",
"type": "SERIES",
"userID": 1
},
{
"characterID": 0,
"description": "Series 2",
"id": 2,
"seriesID": 0,
"status": "ACCEPTED",
"type": "SERIES",
"userID": 1
},
{
"characterID": 0,
"description": "Character 1",
"id": 1,
"seriesID": 25,
"status": "ACCEPTED",
"type": "CHARACTER",
"userID": 1
},
{
"URL": "https://previews.123rf.com/images/aquir/aquir1311/aquir131100316/23569861-sample-grunge-red-round-stamp.jpg",
"characterID": 853,
"description": "Picture 1",
"id": 1,
"seriesID": 25,
"status": "ACCEPTED",
"type": "IMAGE",
"userID": 1
},
{
"URL": "https://c.tenor.com/uEjQxCwAWfgAAAAC/sample.gif",
"characterID": 1,
"description": "Gif 1",
"id": 1,
"seriesID": 1,
"status": "ACCEPTED",
"type": "GIF",
"userID": 1
},
{
"characterID": 0,
"description": "Idea 1",
"id": 1,
"seriesID": 0,
"status": "ACCEPTED",
"type": "IDEA",
"userID": 1
}
]
但是我想實作拆分陣列如下
[
{
"characterID": 0,
"description": "Series 1",
"id": 1,
"seriesID": 0,
"status": "ACCEPTED",
"type": "SERIES",
"userID": 1
},
{
"characterID": 0,
"description": "Series 2",
"id": 2,
"seriesID": 0,
"status": "ACCEPTED",
"type": "SERIES",
"userID": 1
}
]
[
{
"characterID": 0,
"description": "Character 1",
"id": 1,
"seriesID": 25,
"status": "ACCEPTED",
"type": "CHARACTER",
"userID": 1
}
]
我想要實作的是根據type它在陣列中包含的內容將 JSON 拆分成段。
我正在使用 Javascript / Vue,如果有任何解決方案,將不勝感激。
uj5u.com熱心網友回復:
Array.reduce,在這里可以很好地作業。
下面是一個例子。
var data = JSON.parse('[{"characterID":0,"description":"Series 1","id":1,"seriesID":0,"status":"ACCEPTED","type":"SERIES","userID":1},{"characterID":0,"description":"Series 2","id":2,"seriesID":0,"status":"ACCEPTED","type":"SERIES","userID":1},{"characterID":0,"description":"Character 1","id":1,"seriesID":25,"status":"ACCEPTED","type":"CHARACTER","userID":1},{"URL":"https://previews.123rf.com/images/aquir/aquir1311/aquir131100316/23569861-sample-grunge-red-round-stamp.jpg","characterID":853,"description":"Picture 1","id":1,"seriesID":25,"status":"ACCEPTED","type":"IMAGE","userID":1},{"URL":"https://c.tenor.com/uEjQxCwAWfgAAAAC/sample.gif","characterID":1,"description":"Gif 1","id":1,"seriesID":1,"status":"ACCEPTED","type":"GIF","userID":1},{"characterID":0,"description":"Idea 1","id":1,"seriesID":0,"status":"ACCEPTED","type":"IDEA","userID":1}]');
const grouped = data.reduce((a, v) => {
if (!a[v.type]) a[v.type] = [];
a[v.type].push(v);
return a;
}, {});
console.log(grouped);
uj5u.com熱心網友回復:
您可以使用 reduce 創建一個以 type 為鍵的新物件:
var res = data.reduce((acc, val) => {
if (!acc[val.type]) {
acc[val.type] = [val];
} else {
acc[val.type].push(val)
}
return acc;
}, {})
結果將類似于:
{
"SERIES":[
{
"characterID":0,
"description":"Series 1",
"id":1,
"seriesID":0,
"status":"ACCEPTED",
"type":"SERIES",
"userID":1
},
{
"characterID":0,
"description":"Series 2",
"id":2,
"seriesID":0,
"status":"ACCEPTED",
"type":"SERIES",
"userID":1
}
],
"CHARACTER":[
{
"characterID":0,
"description":"Character 1",
"id":1,
"seriesID":25,
"status":"ACCEPTED",
"type":"CHARACTER",
"userID":1
}
],
"IMAGE":[
{
"URL":"https://previews.123rf.com/images/aquir/aquir1311/aquir131100316/23569861-sample-grunge-red-round-stamp.jpg",
"characterID":853,
"description":"Picture 1",
"id":1,
"seriesID":25,
"status":"ACCEPTED",
"type":"IMAGE",
"userID":1
}
],
"GIF":[
{
"URL":"https://c.tenor.com/uEjQxCwAWfgAAAAC/sample.gif",
"characterID":1,
"description":"Gif 1",
"id":1,
"seriesID":1,
"status":"ACCEPTED",
"type":"GIF",
"userID":1
}
],
"IDEA":[
{
"characterID":0,
"description":"Idea 1",
"id":1,
"seriesID":0,
"status":"ACCEPTED",
"type":"IDEA",
"userID":1
}
]
}
uj5u.com熱心網友回復:
我不確定您是否要拆分并存盤到單獨的陣列中,但是,如果是這樣,您可以嘗試以下操作:
const obj = [
{
"characterID": 0,
"description": "Series 1",
"id": 1,
"seriesID": 0,
"status": "ACCEPTED",
"type": "SERIES",
"userID": 1
},
{
"characterID": 0,
"description": "Series 2",
"id": 2,
"seriesID": 0,
"status": "ACCEPTED",
"type": "SERIES",
"userID": 1
},
{
"characterID": 0,
"description": "Character 1",
"id": 1,
"seriesID": 25,
"status": "ACCEPTED",
"type": "CHARACTER",
"userID": 1
},
{
"URL": "https://previews.123rf.com/images/aquir/aquir1311/aquir131100316/23569861-sample-grunge-red-round-stamp.jpg",
"characterID": 853,
"description": "Picture 1",
"id": 1,
"seriesID": 25,
"status": "ACCEPTED",
"type": "IMAGE",
"userID": 1
},
{
"URL": "https://c.tenor.com/uEjQxCwAWfgAAAAC/sample.gif",
"characterID": 1,
"description": "Gif 1",
"id": 1,
"seriesID": 1,
"status": "ACCEPTED",
"type": "GIF",
"userID": 1
},
{
"characterID": 0,
"description": "Idea 1",
"id": 1,
"seriesID": 0,
"status": "ACCEPTED",
"type": "IDEA",
"userID": 1
}
];
const seriesTypeObjs = [];
obj.map(eachObj => {
if (eachObj.type === 'SERIES'){
seriesTypeObjs.push(eachObj);
}
});
console.log('Series Type Objs =>', seriesTypeObjs);
您也可以使用相同的代碼來測驗其他type值。
uj5u.com熱心網友回復:
最簡單的方法是使用實??用程式庫,如lodash 具體方法groupBy
_.groupBy(data, 'type');// {SERIES: Array(2), CHARACTER: Array(1), IMAGE: Array(1), GIF: Array(1), IDEA: Array(1)}
更新:(沒有任何庫的香草方法)
解決方案使用Map哪個物件保存鍵值對 鍵是型別,值是它們的該型別的條目組,帶有?。可選鏈和?? 空合并運算子
let map = new Map()
for(entry of data){
const type = entry?.type ?? "untyped";
map.set(type, [...map.get(type)??[],entry])
}
// Map(5) {'SERIES' => Array(2), 'CHARACTER' => Array(1), 'IMAGE' => Array(1), 'GIF' => Array(1), 'IDEA' => Array(1)}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/370450.html
標籤:javascript json Vue.js
上一篇:即使已定義屬性或方法“componentNames”也未定義
下一篇:如何遍歷組件名稱?
