我很喜欢这个东西,所以我很期待我只是错过了一些非常明显的东西,但问题就在这里......
我从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'。
关于我收到的数据需要注意的一些事项,我不知道我收到了多少物品,而且我也不知道这些物品有多长是。我只需要匹配我收到的所有密钥。
答案 0 :(得分:0)
您可以使用其他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>');
函数,请参阅示例
<section class="learn_more">
<div class="row">
<div class="col-md-7 col-sm-7 col-xs-7">
<img src="`http://opusteno.rs/slike/desktop-pozadine/21289/slike-lava-desktop-t01.jpg`" alt="" />
</div>
<div class="col-md-5 col-sm-5 col-xs-5">
<img src=`"http://opusteno.rs/slike/desktop-pozadine/21289/slike-lava-desktop-t01.jpgg`" alt="" />
</div>
<div class="col-md-5 col-sm-5 col-xs-5">
<img src=`"http://opusteno.rs/slike/desktop-pozadine/21289/slike-lava-desktop-t01.jpgg`" alt="" />
</div>
</div>
</section>
答案 1 :(得分:0)
使用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"
]
}
答案 2 :(得分:0)
获取键并使用数组生成全局变量的版本。
mu
替代使用分组键返回对象的解决方案。
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>');