我有这个JSON:
var json = [{'range':'2012','subtotal':'116.0','total_tax':'11.6','total':'127.6'},{'range':'2013','subtotal':'936.0','total_tax':'93.6','total':'1029.6'},{'range':'2014','subtotal':'368.0','total_tax':'36.8','total':'404.8'},{'range':'2015','subtotal':'267.0','total_tax':'26.7','total':'293.7'}];
如何将其转换为这样的范围数组(使用Javascript或jQuery):
['2012', '2013', '2014', '2015']
感谢您的帮助。
答案 0 :(得分:4)
您可以简单地使用.map
:
json.map(function(i) {
return i.range;
});
//["2012", "2013", "2014", "2015"]
答案 1 :(得分:2)
var mapped = json.map(function(obj) {
return obj.range;
});
另外,小点;你拥有的是一个数组。 JSON 是指数组/对象表示为字符串(恰好与它的JavaScript文字符号相匹配)
答案 2 :(得分:2)
首先,那不是JSON,这是一个JavaScript对象文字。我将您的数据称为data
,而不是json
。
其次,让我们使用两个可重用的函数来更清楚地表达我们的意图
let map = f => x => x.map(f);
let prop = y => x => x[y];
现在,我们只是映射您的数据并提取我们想要的属性
map(prop('range'))(data);
// => ["2012","2013","2014","2015"]
或我们可以定义一个可重复使用的帮助器
let getRange = map(prop('range'));
getRange(data);
// => ["2012","2013","2014","2015"]
这是 ES5 等效
var map = function map(f) {
return function (x) {
return x.map(f);
};
};
var prop = function prop(y) {
return function (x) {
return x[y];
};
};
var getRange = map(prop('range'));
getRange(data);
// => ["2012","2013","2014","2015"]
答案 3 :(得分:1)
您实际上有一组嵌套对象。以下是一些选项:
天真的解决方案是遍历此数组并将所需的值推送到新数组:
function getRange(arr) {
var result = [];
for (var i = 0; i < arr.length; i++) {
result.push(arr[i].range)
};
return result;
}
您还可以使用本机Array.map方法更轻松地完成此操作:
function getRange(arr) {
return arr.map(function(elem) {
return i.range;
})
}