我在 javascript 中有这个数组:你可以看到它 here
Array
(
[2012-10-01] => Array
(
[1] => 1
[2] => 0
...
[148] => 0
[149] => 0
[150] => 1
)
[2012-10-02] => Array
(
[1] => 0
[2] => 1
...
[148] => 0
[149] => 1
[150] => 0
)
[2012-10-03] => Array
(
[1] => 1
[2] => 0
...
[148] => 0
[149] => 0
[150] => 1
)
..............
为了减少它,我想只保留有 1 的项目并忽略有 0 的项目。 像这样
Array
(
[2012-10-01] => Array
(
[23] => 1
[64] => 1
[70] => 1
[73] => 1
[76] => 1
[108] => 1
[138] => 1
)
我使用了 underscorejs 和这段代码:
var new_o={};
var v = _.each(original_array,function(day,key){
var arr = {};
_.map(day,function(item,k){
if (item){
arr[k]=item;
}
}) ;
new_o[key]= arr;
} ) ;
它有效,但我很确定,我没有得到最好的下划线。 有人可以建议一个更聪明的方法吗?
最佳答案
不要使用_.map
如果你不使用它的返回值,那只是 _.each
的稍微贵一点的版本。 .
就简化事情而言,你有点卡住了,因为 Underscore 和 JavaScript 都想迭代数组,并且你有嵌套对象(顺便说一句,{ }
是一个对象JavaScript 中的字面量,[ ]
是一个数组,它们是完全不同的)。也许您对当前数据结构能做的最好的事情就是使用 _.reduce
迭代子对象,同时携带新的子对象;像这样的东西:
var new_o = { };
_.each(original, function(day, key) {
new_o[key] = _(day).reduce(function(memo, item, k) {
if(item)
memo[k] = item;
return memo;
}, { });
});
关于javascript - 使用underscorejs过滤二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13159885/