如何从嵌套的JSON中获取键值?

时间:2015-05-27 18:58:09

标签: javascript jquery

我有这个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']

感谢您的帮助。

4 个答案:

答案 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;
    })
  }