[英]Sorting an array of objects into arrays by unique key
我在這方面很菜鳥,所以我期待我只是錯過了一些非常明顯的東西,但問題是......
我從 JSON 調用中獲取了未知數量的對象,我需要匹配所有對象鍵並將它們放入自己的數組中。 問題是我不知道每個數組中有多少個對象,為了顯示我的問題,這是我收到的數據的一個非常簡化的版本。
resultOfCall = [
{
'x': 'Lorem',
'y': 'ipsum',
'z': 'dolor'
},
{
'x': 'sit',
'y': 'amet',
'z': 'asdf',
'a': 'qwerty'
},
{
'x': 'consectetur',
'y': 'adipiscing',
'z': 'elit'
}
]
我想獲取這些數據並為每個唯一鍵創建一個數組,以便上述數據看起來像這樣......
var a = ['qwerty'];
var x = ['lorem','sit','consectetur'];
var y = ['ipsum', 'amet', 'adipiscing'];
var z = ['dolor', 'asdf', 'elit'];
現在我上面數據的明顯問題是我仍然需要知道 x 被稱為“x”。
關於我收到的數據的一些注意事項,我不知道我要返回多少個對象,也不知道這些對象中的任何一個有多久。 我只需要匹配我取回的所有密鑰。
您可以使用其他object
來存儲您的數組和Array.prototype.forEach
僅函數,請參閱示例
var resultOfCall = [ { 'x': 'Lorem', 'y': 'ipsum', 'z': 'dolor' }, { 'x': 'sit', 'y': 'amet', 'z': 'asdf', 'a': 'qwerty' }, { 'x': 'consectetur', 'y': 'adipiscing', 'z': 'elit' } ]; var obj = {}; resultOfCall.forEach(function(e) { Object.keys(e).forEach(function(k) { if (obj[k]) { obj[k].push(e[k]); } else { obj[k] = [e[k]]; } }); }); document.write('<pre>' + JSON.stringify(obj,0,2) + '</pre>');
使用reduce
將變量作為鍵/值對存儲在對象中:
var obj = resultOfCall.reduce(function (p, c) {
Object.keys(c).forEach(function (el) {
p[el] = p[el] || [];
p[el].push(c[el]);
});
return p;
}, {});
輸出
{
"x": [
"Lorem",
"sit",
"consectetur"
],
"y": [
"ipsum",
"amet",
"adipiscing"
],
"z": [
"dolor",
"asdf",
"elit"
],
"a": [
"qwerty"
]
}
一個接受鍵並使用數組創建全局變量的版本。
var resultOfCall = [{ 'x': 'Lorem', 'y': 'ipsum', 'z': 'dolor' }, { 'x': 'sit', 'y': 'amet', 'z': 'asdf', 'a': 'qwerty' }, { 'x': 'consectetur', 'y': 'adipiscing', 'z': 'elit' }]; void function (data) { var r = window; data.forEach(function (a) { Object.keys(a).forEach(function (k) { r[k] = r[k] || []; r[k].push(a[k]); }); }); }(resultOfCall); document.write('<pre>a: ' + JSON.stringify(a, 0, 4) + '</pre>'); document.write('<pre>x: ' + JSON.stringify(x, 0, 4) + '</pre>'); document.write('<pre>y: ' + JSON.stringify(y, 0, 4) + '</pre>'); document.write('<pre>z: ' + JSON.stringify(z, 0, 4) + '</pre>');
另一種解決方案,它返回一個帶有分組鍵的對象。
var resultOfCall = [{ 'x': 'Lorem', 'y': 'ipsum', 'z': 'dolor' }, { 'x': 'sit', 'y': 'amet', 'z': 'asdf', 'a': 'qwerty' }, { 'x': 'consectetur', 'y': 'adipiscing', 'z': 'elit' }], grouped = function (data) { var r = {}; data.forEach(function (a) { Object.keys(a).forEach(function (k) { r[k] = r[k] || []; r[k].push(a[k]); }); }); return r; }(resultOfCall); document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.