下划线过滤器嵌套对象数组

时间:2017-03-28 12:18:16

标签: javascript jquery underscore.js

我有以下对象数组:

[{key: "test", values: [{key: "2015-05", values: [{1:2}, {3:4}]}, {}], ...]

我希望按key值进行过滤,以便在特定日期之后保留值。

我目前有这个,但结果是错误的

_.map(temp1, function(value, key) { return _.filter(value.values, function(v) { return v.key > "2015-05"; }); });

2 个答案:

答案 0 :(得分:1)

弗兰克的answer

略有改善



var data = [
  {
    key: "1", 
    values: [
      {key: "2014-05", values: [{1:2}, {3:4}]},
      {key: "2015-05", values: [{1:2}, {3:4}]},
      {key: "2013-05", values: [{1:2}, {3:4}]}
    ]
  },
  {
    key: "2", 
    values: [
      {key: "2014-05", values: [{1:2}, {3:4}]},
      {key: "2015-05", values: [{1:2}, {3:4}]},
      {key: "2013-05", values: [{1:2}, {3:4}]}
    ]
  }
];

var a = _.map(data, (d) => {
  d.values = _.filter(d.values, (v) => v.key > "2014");
  return d;
});
console.log(a);

<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
&#13;
&#13;
&#13;

无需解析此日期格式,字符串比较就足够了。重要的是要注意,尽管_.map操作,但这将修改原始文件。

答案 1 :(得分:0)

这样的事可能吗?

var data = [
  {
    key: "1", 
    values: [
      {key: "2014-05", values: [{1:2}, {3:4}]},
      {key: "2015-05", values: [{1:2}, {3:4}]},
      {key: "2013-05", values: [{1:2}, {3:4}]}
    ]
  },
  {
    key: "2", 
    values: [
      {key: "2014-05", values: [{1:2}, {3:4}]},
      {key: "2015-05", values: [{1:2}, {3:4}]},
      {key: "2013-05", values: [{1:2}, {3:4}]}
    ]
  }
];

var a = _.map(data, (d) => {
  d.values = _.filter(d.values, (v) => {
    return Date.parse(v.key) > Date.parse("2014");
  });
  return d;
});