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