我正在寻找按名称拆分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);
}
}
});
});
然而,正如我新手一样,我完全不确定这是否是实现这一目标的标准方法。任何评论都非常感谢。
答案 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;
});