按名称拆分json对象

时间:2016-02-20 23:27:00

标签: jquery json each

我正在寻找按名称拆分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);
        }
      }
    });
});

然而,正如我新手一样,我完全不确定这是否是实现这一目标的标准方法。任何评论都非常感谢。

4 个答案:

答案 0 :(得分:2)

只要你知道所有的财产名称,你所拥有的东西都没有错。

如果你想使它更整洁,更动态,你可以将所有结果存储在另一个对象中,每个属性与source属性具有相同的名称,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>

答案 1 :(得分:1)

通过使用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);

答案 2 :(得分:1)

当您正在寻找最聪明的方法时,请使用普通的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))

答案 3 :(得分:1)

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

如果将json保存到变量arr中,则可以执行此操作:

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

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