通过唯一键将对象数组排序到数组中

时间:2016-03-11 12:29:02

标签: javascript arrays sorting object

我很喜欢这个东西,所以我很期待我只是错过了一些非常明显的东西,但问题就在这里......

我从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'。

关于我收到的数据需要注意的一些事项,我不知道我收到了多少物品,而且我也不知道这些物品有多长是。我只需要匹配我收到的所有密钥。

3 个答案:

答案 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"
  ]
}

DEMO

答案 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>');