【问题标题】:how to collect data from json objects with multiple keys and push all values to single key:value array如何从具有多个键的 json 对象中收集数据并将所有值推送到单个键:值数组
【发布时间】:2020-05-20 16:56:42
【问题描述】:

我有一个示例 json 对象:

var jsonString = '[{ "name":"John", "age":30, "car":Mercedes},{ "name":"Jimy", "age":32, "car":Audi},{ 
"name":"Mia", "age":22, "car":Renault},{ "name":"Frank", "age":35, "car":null }]';

var data = JSON.parse(jsonString);

我想从 data 数组中获取最新的两个数据并创建一个 key:value 数组,这样对于每个 json 属性在数组中都有一个键,并且所有 json 对象的所有值都存储在它们的下面适当的键,例如,我想要的结果通常是数组 [{key: data_array_for_that_key}] 或者具体来说:

output=[{name: [Frank, Mia]}, {age: [35,22]}, {car: [null, Renault]}......]

我尝试过这样的事情:

var output = [];

  data.slice(-2).forEach((d, i) => {
    Object.keys(d).forEach((key) => {
      output.push({[key] : d[key]});
    });
  });
  console.log(output);

但它为每个 json 对象创建了一个键和值,这不是我想要的。

我该如何解决这个问题?

【问题讨论】:

    标签: javascript json object ecmascript-6 foreach


    【解决方案1】:

    您可以为分组相同的键获取一个哈希表,并为每个新键推送一个新对象到output

    var jsonString = '[{ "name":"John", "age":30, "car":"Mercedes"},{ "name":"Jimy", "age":32, "car":"Audi"},{"name": "Mia", "age": 22, "car": "Renault"},{"name": "Frank","age": 35,"car": null}]',
        data = JSON.parse(jsonString);
        output = [],
        temp = [];
    
    data.slice(-2).forEach(o => Object.entries(o).forEach(([k, v]) => {
        if (!temp[k]) output.push({ [k]: temp[k] = [] });
        temp[k].push(v);
    }));
    
    console.log(output);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-25
      • 2018-10-18
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多