下面哪些是稀疏数组

下面定义的几个数组哪一个是稀疏数组?

let arr = [,,,];
let arr1 = new Array(3);
let arr2 = [undefined,undefined,undefined];
let arr3 = new Array();
arr3.length = 3;

用什么方法来检测呢?

in操作符?for-in?还是别的什么
阅读 4.2k
1 个回答

从定义来看,稀疏数组就是没有从0开始的连续的index。

A sparse array is one in which the elements do not have contiguous indexes starting at 0.

所以检测方式可以是,index in array,是否从0array.length - 1这个表达式都返回true,如果不是,则表示为稀疏数组。

也可以通过forEach来判断:

var realCount = 0;
array.forEach(function() { realCount ++;});
if(realCount !== array.length)
    console.log('稀疏数组');

那么什么样会有稀疏数组?

  1. 有没有被赋值的项,或者

  2. 有被删除(delete)的项

例如:

var arr0 = [,,,];                           // 稀疏
var arr1 = [1,,2,];                         // 稀疏
var arr2 = new Array(3);                    // 稀疏
var arr3 = new Array(); arr3.length = 3;    // 稀疏
var arr4 = [1,2,3]; delete arr4[0];         // 稀疏

// 以下都是非稀疏
var arr5 = [undefined, undefined, undefined];
var arr6 = new Array(3); arr6[0] = undefined; arr6[1] = undefined; arr6[2] = undefined;

注意,虽然arr2,arr3和arr5,arr6看起来都是undefined,但是其实不一样。arr5和arr6都是显式初始化(赋值)每个元素为undefined。浏览器中是区分了未初始化和初始化的:
图片描述
未初始化的undefined显示的是undefined X ?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏