使用具有多维数组的underscorejs映射

时间:2014-09-10 22:27:33

标签: javascript json underscore.js

我想知道_.map是否应该用于完成以下内容:

假设您有以下json(时间长度'将始终为1.长度'值'未知但是对于&中的每个项目总是相同的#39;数据'数组(本例中为2)。

data=[
  {
    time: "time1",
    values: [
      1,
      2
    ]
  },
  {
    time: "timex",
    values: [
      7,
      9
    ]
  },
  {
    time: "time_whatever",
    values: [
      11,
      22
    ]
  }
]

这就是所需的输出:

[
  {
    "x": "time1",
    "y": 1,
    "y2": 2
  },
  {
    "x": "time1",
    "y": 7,
    "y2": 9
  },
  {
    "x": "time1",
    "y": 11,
    "y2": 22
  }
]

当'重视'时,我能够实现这一目标。长度是1:

d = _.map(data, function(r, i) {
  return {
    "x": r.time,
    "y": r.values
  };
});

我尝试将每个循环放在_.map函数中但是不成功。

不确定map是否是多维数组的正确答案。我知道这可以通过javascript为每个循环完成,但我想知道是否有一个简单的方法来使用_.map或者可能是另一个下划线集合。

由于

1 个答案:

答案 0 :(得分:2)

普通循环可能是最简单,最干净,最快速的解决方案:

var d = _.map(data, function(r, i) {
  var o = {
    "x": r.time,
    "y": r.values[0]
  };
  for (var i=1; i<r.values.length; i++)
    o["y"+(i+1)] = r.values[i];
  return o;
});

使用下划线,您可以使用reduce

var d = _.map(data, function(r, i) {
  return _.reduce(r.values, function(o, v, i) {
    o["y"+(i?i+1:"")] = v;
    return o;
  }, {
    "x": r.time
  });
});

(两个代码段都假设虽然values.length可能未知,但数组中至少有一个