按名称拆分 json 个对象

Split json object by name

我正在寻找按名称拆分 json 对象的最聪明的方法,但我还没有找到正确的答案。

json 看起来像这样:

[{
    "Date": "2016-02-17",
    "ProductionAvg": 0.014558
}, {
    "Date": "2016-02-18",
    "ProductionAvg": 0.014154
}]

我需要将对象拆分成数组,其中只有每对的值:

[2016-02-17, 2016-02-18]

[0.014558, 0.014154]

到目前为止我想出的代码是:

var date = []
var production = []

$.each(data, function () {
    $.each(this, function (name, value) {
        if (name == "Date") {
          date.push(value);
        }
        if (name == "ProductionAvg") {
          production.push(value);
        }
      }
    });
});

但是,作为我的新手,我完全不确定这是否是实现此目标的标准方法。非常感谢任何评论。

只要你知道所有 属性 个名字,你的东西就没有问题。

如果你想让它更简洁、更动态,你可以将所有结果存储在另一个对象中,每个 属性 与源 属性 同名,值是从该来源提取的值,例如

{
    "Date": ["2016-02-17", "2016-02-18"],
    "ProductionAvg": [0.014558, 0.014154]
}

这只需要检查结果对象中是否存在 属性,如果不存在,则将其设置为空数组。然后将当前值推送给它:

var arr = [{
  "Date": "2016-02-17",
  "ProductionAvg": 0.014558
}, {
  "Date": "2016-02-18",
  "ProductionAvg": 0.014154
}]

results = {};
$.each(arr, function() { // loop array
  $.each(this, function(k, v) { // loop object
    // if result does not have property name, create it with empty array
    if(typeof(results[k]) === "undefined") {
      results[k] = [];
    }
    
    // push the value to the result array
    results[k].push(v);
  })
});

console.dir(results);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

这是一种更好的方法,可以使用 hasOwnProperty。此外,通过创建不需要的嵌套 $.each,您会阻碍应用程序的性能。

请查找代码here

代码:

var data = [{
    "Date": "2016-02-17",
    "ProductionAvg": 0.014558
}, {
    "Date": "2016-02-18",
    "ProductionAvg": 0.014154
}];
var date = []
var production = []

$.each(data, function (key, value) {
    if (value.hasOwnProperty('Date')) {
        date.push(value.Date);
    }
    if (value.hasOwnProperty('ProductionAvg')) {
        production.push(value.ProductionAvg);
    }
});

document.write('date = ' + date + ', Production = ' + production);
console.log(date, production);

如果您正在寻找最聪明的方法,请使用普通 javascript。

var arr = [{
    "Date": "2016-02-17",
    "ProductionAvg": 0.014558
}, {
    "Date": "2016-02-18",
    "ProductionAvg": 0.014154
}];

function groups(arr) {
    var obj = {};
    arr.forEach(function(val) {
        var keys = Object.keys(val);
        keys.forEach(function(v) {
            if (obj[v]) {
                return obj[v].push(val[v]);
            } 
            obj[v] = [val[v]];
        });
    });

    return obj;
}

console.log(groups(arr))

您可以使用高阶函数映射从数组创建新数组。

如果您将 json 保存到变量 arr 中,您可以这样做:

var dates = arr.map(x=>{
   return x.Date;
});

var production = arr.map(x=>{
   return x.ProductionAvg;
});