fst*_*tab 2 javascript arrays list map underscore.js
我需要处理一些包含undefined值的数组,如下所示:
[ 1, 1, 1, 1, 1, , 1, 1 ]
[ 1, , 1, , , 1, 1 ]
[ 1, , , , , 1, 1 ]
Run Code Online (Sandbox Code Playgroud)
我需要实现的不是删除undefined值,但我需要用零替换它们.
我尝试使用underscore.js来实现这一目标; 没有成功.
以下是我的解决方案尝试:
binarymap = _.map(binarymap, function(curr){
// let's replace all undefined with 0s
if(_.isUndefined(curr)) {
return 0;
}
return curr;
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,它不起作用.underscore.js的功能_.map完全忽略了undefined价值观.
有任何想法吗?优雅的解决方
这里的实际问题是缺少数组元素,
可以在元素列表的开头,中间或末尾省略数组元素.每当元素列表中的逗号前面没有AssignmentExpression(即开头的逗号或另一个逗号后面的逗号)时,缺少的数组元素会增加数组的长度并增加后续元素的索引.未定义Elided数组元素.如果在数组的末尾省略了元素,则该元素不会影响数组的长度.
并Array.prototype.map跳过所有缺少的数组元素,
callbackfn仅针对实际存在的数组元素调用; 它不会被调用缺少数组的元素.
所以,为了让map函数考虑到Array元素,我能想到的最简单的方法是调整你的方法,比如这个
var arr = [ 1, , , , , 1, 1 ];
console.log(_.map(Array.apply(null, arr), function (currentItem) {
return _.isUndefined(currentItem) ? 0 : currentItem;
}));
# [ 1, 0, 0, 0, 0, 1, 1 ]
Run Code Online (Sandbox Code Playgroud)
在这里,Array.apply(实际上Function.prototype.apply)做了重要的事情,将缺失的元素转换为undefined.
console.log(Array.apply(null, arr));
# [ 1, undefined, undefined, undefined, undefined, 1, 1 ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5731 次 |
| 最近记录: |