[英]How to convert a React array to a JSON object with same key and value?
[英]Convert JSON array with same key value
我有這種形式的數組
[
{
"time": "2017-09-14 02:44 AM",
"artist": "Sam",
"message": "message 1",
"days": 0
},
{
"time": "2017-09-14 02:44 AM",
"artist": "Jerry",
"message": "message 2",
"days": 2
},
{
"time": "2017-09-14 02:44 AM",
"artist": "Sam",
"message": "message 3",
"days": 4
},
{
"time": "2017-09-14 02:49 AM",
"artist": "Jerry",
"message": "message 5",
"days": 2
},
{
"time": "2017-09-14 02:59 AM",
"artist": "Sam",
"message": "message 7",
"days": 10
},
{
"time": "2017-09-14 02:59 AM",
"artist": "Sam",
"message": "message 5",
"days": 10
},
]
我需要這樣的輸出
[{
artist:"Sam",
data : [
{message:"message 1" , days: 0},
{message:"message 3" , days: 4},
{message:"message 7" , days: 10},
{message:"message 5" , days: 10}
]
},
{
artist:"Jerry",
data : [
{message: "message 2", days: 2},
{message: "message 5", days: 2}
]
}]
非常感謝您的任何幫助。
這是我嘗試過的代碼,
var obj = {};
data.map(function(item){
if(angular.isDefined(obj.artist) && obj.artist === item.artist){
obj.data.push({message: item.message, days:item.days })
}else{
obj.artist = item.artist;
obj.data = [];
obj.data.push({message: item.message, days:item.days })
}
});
console.log(obj);
但是它創建了一個JSON對象。
試試這個Array#reduce
函數
created obj
。 artist
值創建數組。 然后使用Array#indexOf()>0
申請檢查數組中是否存在藝術家值。
是否存在。只需推動另一個對象以存在數據數組
Array#index
用於查找在新數組中顯示的對象的位置 var arr = [ { "time": "2017-09-14 02:44 AM", "artist": "Sam", "message": "message 1", "days": 0 }, { "time": "2017-09-14 02:44 AM", "artist": "Jerry", "message": "message 2", "days": 2 }, { "time": "2017-09-14 02:44 AM", "artist": "Sam", "message": "message 3", "days": 4 }, { "time": "2017-09-14 02:49 AM", "artist": "Jerry", "message": "message 5", "days": 2 }, { "time": "2017-09-14 02:59 AM", "artist": "Sam", "message": "message 7", "days": 10 }, { "time": "2017-09-14 02:59 AM", "artist": "Sam", "message": "message 5", "days": 10 }, ] var res = arr.reduce(function(a,b){ var f =a.map(i=> i.artist) if(f.indexOf(b.artist) > 0){ a[f.indexOf(b.artist)].data.push({message:b.message,days:b.days}) }else{ a.push({artist:b.artist, data:[{message:b.message,days:b.days}]}) } return a; },[]) console.log(res)
您可以對同一位藝術家使用哈希表,並從中收集數據。
var data = [{ time: "2017-09-14 02:44 AM", artist: "Sam", message: "message 1", days: 0 }, { time: "2017-09-14 02:44 AM", artist: "Jerry", message: "message 2", days: 2 }, { time: "2017-09-14 02:44 AM", artist: "Sam", message: "message 3", days: 4 }, { time: "2017-09-14 02:49 AM", artist: "Jerry", message: "message 5", days: 2 }, { time: "2017-09-14 02:59 AM", artist: "Sam", message: "message 7", days: 10 }, { time: "2017-09-14 02:59 AM", artist: "Sam", message: "message 5", days: 10 }], hash = Object.create(null), result = data.reduce(function (r, a) { if (!hash[a.artist]) { hash[a.artist] = { artist: a.artist, data: [] }; r.push(hash[a.artist]); } hash[a.artist].data.push({ message: a.message, days: a.days }); return r; }, []); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.