如何在JavaScript中消除数组索引间的空间隙?
消除JS数组非连续索引空隙并按原索引排序的简便方法
当你在JavaScript中给数组赋予非连续的随机索引时,数组会产生未初始化的empty空隙,比如:
const arr = []; arr[5] = 'a' arr[2] = 'b' arr[9] = 'c' arr[0] = 'd'
用console.log输出时会显示包含空隙的数组:['d', empty, 'b', empty × 2, 'a', empty × 3, 'c'],现在需要得到按原索引排序的紧凑数组['d', 'b', 'a', 'c'],有两种非常简便的实现方式:
方法一:使用Array.filter()
filter方法会自动跳过数组中未初始化的empty位置,并且遍历顺序是从索引0到最大索引,刚好满足按原索引排序的需求:
// 过滤所有empty空隙,保留所有已赋值元素(包括undefined) const compactArr = arr.filter(() => true); // 如果需要排除值为undefined的元素,可以用: // const compactArr = arr.filter(item => item !== undefined);
方法二:使用Object.values()
在ES6及以上版本中,Object.values()处理数组时,会按数字索引的升序返回所有已赋值的元素,同样能直接得到目标结果:
const compactArr = Object.values(arr);
这两种方法都非常简短高效,能快速实现你的需求。
内容的提问来源于stack exchange,提问作者WillWillington
相关产品推荐
相关产品推荐

