按d3.js中的object属性过滤嵌套的对象数组

时间:2017-09-11 21:36:24

标签: javascript arrays d3.js filter

我有一个陨石登陆数据集。
我按类型嵌套四个键中的数据:

  var dataByType = d3.nest()
    .key(function(d) {
          return d.rectype;
    })
    .entries(dataset); // the original array

这是结果结构:data

enter image description here

现在我想创建新数组,过滤嵌套的数组:我希望每个过滤后的数组只包含" mass"属性位于定义范围内 所以我尝试了这个:

// filter small meteorites
var lightWeight = dataByType.forEach(function(d){
      d.values.filter(function (object) {
            var mass = object.mass;
            return mass <= 100;
      });
  });

但它返回未定义

嵌套给我带来了很多麻烦!我做错了什么?
提前谢谢

4 个答案:

答案 0 :(得分:3)

我认为你在每次传递forEach时都会覆盖lightWeight。而是尝试将lightWeight创建为自己的对象,然后在循环中添加所需的键:

for /D %%d in (*) do (
    echo %%d\test.txt
)

工作笔(我认为?)正在做你想做的事: https://codepen.io/benjaminwfox/pen/veBjrP?editors=0012

答案 1 :(得分:0)

我无法说出你的数据集是什么样子,但可能只是因为你最后没有回复lightWeight

答案 2 :(得分:0)

我不确定您要尝试过滤的是什么,但尝试使用map而不是forEach,并且需要在迭代器中返回d,函数。

如下所示:

var lightWeight = dataByType.map(function(d) {
    d.filteredValues = d.values.filter(function (object) {
        return object.mass <= 100;
    });
    return d;
});

答案 3 :(得分:0)

假设您使用的格式为datadata的每个项目都有key属性和values数组。

如果您想按每个条目的values属性过滤mass数组,则需要使用.map().filter()方法的组合。

这应该是你的代码:

var lightWeight = data.map(function(d){
    var obj = {};
    obj.key = d.key;
    obj.values = d.values.filter(function (object) {
            return object.mass <= 100;
    });
    return obj;
});

这将为您提供预期的结果。