我在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
)
..............
为了减少它,我想只保留其中包含零的项目,并省略带有零的项目。 像这样
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;
} ) ;
它有效,但我很确定,我没有得到最好的下划线。 任何人都可以建议更聪明的方式吗?
答案 0 :(得分:2)
如果您不使用其返回值,请不要使用_.map
,这只是_.each
稍贵的版本。
就简化事情而言,你有点卡住,因为Underscore和JavaScript都想迭代数组并且你有嵌套对象(BTW,{ }
是对象文字在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;
}, { });
});