Skip to content

Latest commit

 

History

History
87 lines (69 loc) · 2.1 KB

数组空位.md

File metadata and controls

87 lines (69 loc) · 2.1 KB

数组的空位

数组的空位指,数组的某一个位置没有任何值。 空位不是undefined,一个位置的值等于undefined,依然是有值的。

思考:不使用loop循环,创建一个长度为100的数组,并且每个元素的值等于它的下标?

数组空位的生成

  • Array构造
	Array(100);  //[undefined × 100]  
	[,1,,,,2]
  • Array.prototype.copyWithin(target,start = 0,end = this.length) copyWithin()会连空位一起拷贝。 它接受三个参数。

target(必需):从该位置开始替换数据。
start(可选):从该位置开始读取数据,默认为0。如果为负值,表示倒数。
end(可选):到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数。

	//copyWithin()会连空位一起拷贝。
	[,'a','b',,].copyWithin(2,0) // [,"a",,"a"]

空位的处理

  • ES5:
    forEach,filter,every,some都会跳过空位。
    map会跳过空位,但是保留这个值。
    join,toString会将空位视为undefined,而undefined和null会被处理成空字符串。
	Array(100).join(",").split(",");
  • ES6 :明确的将空位转为undefined处理

  • 数组API

Array.from方法会将数组的空位,转为undefined,也就是说,这个方法不会忽略空位。

	Array.from({length:100}); 

	Array.from(Array(100));

	function * generator(i){
		yield i;
		if( i < 99 ){
			yield * generator(i+1);
		}
	}
	Array.from(generator(0));

Array.of,同上

	Array.of(1, 2) // [1, 2]

	Array.of.apply(null,Array(100));

fill方法,将空位视为正常的数组位置

	Array(100).fill("1");

entries()、keys()、values()、find()和findIndex()会将空位处理成undefined。

  • 其他方式

扩展运算符(...)也会将空位转为undefined

	[...Array(100)]

for...of循环也会遍历空位

#思考题几种解法

ES5:

	Object.keys(Array(101).toString());

ES6:

	Array.from(Array(100).keys());
	//或者
	[...Array(100).keys()]