Iva*_*van 4 javascript arrays sparse-array
我有一个元素数组,其中条目是稀疏的.如何轻松地将稀疏数组压缩成密集数组,以便每次循环数据时都不必一直检查空值和未定义值?
以下是一些示例数据:
var sparse = [];
sparse[1] = undefined;
sparse[5] = 3;
sparse[10] = null;
var dense = sparseToDenseArray(sparse);
// dense should be [3]
Run Code Online (Sandbox Code Playgroud)
Iva*_*van 11
您可以使用filter()与Firefox,Chrome,IE 9,Opera和Safari Web浏览器兼容的软件.
根据David Flanagan的说法,在Javascript:The Definitive Guide中,将稀疏数组转换为密集数组的简单方法是在其上使用过滤器,如下所示:
var dense = sparse.filter(function (x) { return x !== undefined && x != null; });
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为filter()跳过缺少的元素,只有true当x不是undefined或时才返回null.
如果filter()不支持,这将压缩稀疏数组:
var compacted = [];
for(var i = 0; i < sparse.length; i++)
if(i in sparse)
compacted.push(sparse[i]);
Run Code Online (Sandbox Code Playgroud)
这个filter()例子的确切等价物是:
var compacted = [];
for(var i = 0; i < sparse.length; i++)
if(sparse[i] != null)
compacted.push(sparse[i]);
Run Code Online (Sandbox Code Playgroud)
在ES2017(ES8)中,这很简单 Object.values(sparseArray)
例如:
const sparseArray = [, , 'foo', 'bar', , 'baz', ,];
const compactArray = Object.values(sparseArray);
console.log(compactArray);Run Code Online (Sandbox Code Playgroud)
请注意,此方法仅删除间隙,根据需要向下移动现有数组元素的索引.它不会删除显式设置为undefined或的元素null.
在 vanilla JS 中,适用于所有浏览器:
function filt(a) {
var b = [];
for(var i = 0;i < a.length;i++) {
if (a[i] !== undefined && a[i] !== null) {
b.push(a[i]);
}
}
return b;
}
> filt([1,undefined,3])
[1, 3]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3250 次 |
| 最近记录: |