我有一个陨石登陆数据集。
我按类型嵌套四个键中的数据:
var dataByType = d3.nest()
.key(function(d) {
return d.rectype;
})
.entries(dataset); // the original array
这是结果结构:data
现在我想创建新数组,过滤嵌套的数组:我希望每个过滤后的数组只包含" mass"属性位于定义范围内 所以我尝试了这个:
// filter small meteorites
var lightWeight = dataByType.forEach(function(d){
d.values.filter(function (object) {
var mass = object.mass;
return mass <= 100;
});
});
但它返回未定义。
嵌套给我带来了很多麻烦!我做错了什么?
提前谢谢
答案 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)
假设您使用的格式为data
,data
的每个项目都有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;
});
这将为您提供预期的结果。