CNode

不使用循环构造空数组

Wwaksana发布于12 年前最后回复12 年前21 回复6785 浏览0 收藏

不显试使用循环构造一个空数组,同学们有什么想法吗 那天我在stackoverflow上看到一种方法很有趣,和大家分享下。

查看回复

回复 (21)

A
alsotang#1·12 年前

W
waksana#2·12 年前
引用 alsotang

就是构造一个给定长度的数组,每个元素都是undefined。不用循环。 arr = new Array(n) 不可以,因为arr.forEach()里面的函数不会被执行

A
alsotang#3·12 年前
引用 alsotang

@waksana forEach 遇到 undefined 不会执行,不知遇到其他零值会不会也这样。

那你说的有趣方法呢?

W
waksana#4·12 年前
引用 alsotang

@alsotang 好吧,undefined也是能运行的,不过new Array 没有真的生成10个undefine。他显示的是[undefined * 10]. 解决办法是 Array.apply(null, {length:10})

A
alsotang#5·12 年前
引用 alsotang

@waksana 很 trick 啊。我大概猜到了部分原理,{length:10} 被 Array 当成了一个长度为 10 的数组。于是新数组被真的逐个赋值了。

D
dlutwuwei#6·12 年前

array json形式是{ length:2, 0:“”,1:“" }

C
coordcn#7·12 年前
引用 dlutwuweiarray json形式是{ length:2, 0:“”,1:“" }

这个可以打印验证么?求代码

H
hackerjs#8·12 年前

Array.apply(null,Array(10)) //也可以,,

H
hackerjs#9·12 年前
引用 dlutwuweiarray json形式是{ length:2, 0:“”,1:“" }

@coordcn {length:10, "0":“”,“1”:“” }, 这是“类数组”对象。

Y
youxiachai#10·12 年前

undefined 有没有办法改为 0 值呢?

W
waksana#11·12 年前
引用 youxiachaiundefined 有没有办法改为 0 值呢?

构造了之后用map....map不算循环吧

D
dlutwuwei#12·12 年前
引用 dlutwuweiarray json形式是{ length:2, 0:“”,1:“" }

@coordcn console.dir([1,2]),数组和类数组对象的序列化结果是一样的,只是数组的原型会带有很多方法,比如slice,join之类的,var args = Array.prototype.slice.call(arguments);,这个可以把类数组对象转换为数组。

1
151263#13·12 年前

var arr = []; arr[9] = undefined;

J
jacklau#14·12 年前

new Array(10).join(',').split(',').map(function(){return undefined});

Y
youxiachai#15·12 年前
引用 151263var arr = []; arr[9] = undefined;

你这个..只有一个被赋值...

W
wh1100717#16·12 年前
引用 alsotang

@waksana 这样也可以

Array.apply this, [,,,,,,,,,]
Array.apply this, Array(10)
Array.apply this, Array.apply(this, [10])
W
wh1100717#17·12 年前
引用 alsotang

@alsotang

Object.apply(this, argumenst)传参方式是一个由各个参数组成的数组或类数组(一个有length属性的对象),传入参数个数取决于 length 的值。比如

Array.apply this, {
    0:0
    1:1
    2:2
    length:4
}
#输出为 [ 0, 1, 2, undefined ]

而这实际上是Object.apply的用法,Array只是调用而已,它不负责处理{length:10}

具体类数组相关可以参考这里 http://blog.segmentfault.com/f2e/1190000000415572

W
wh1100717#18·12 年前
引用 hackerjsArray.apply(null,Array(10)) //也可以,,

Array(10)会转换成[,,,,,,,,,],然后就是Array.apply(null, [,,,,,,,,,])了,哈哈,道理都是一样的

A
alsotang#19·12 年前
引用 alsotang

@wh1100717 碉堡了

W
wh1100717#20·12 年前
引用 alsotang

@alsotang 哈哈 看了觉得好玩 特意去查了一下...

G
gitchs#21·12 年前

递归

var GenerateArray = function(i,array){
	array = array||[];
	if (i>0){
		--i;
		array.push(undefined);
		return GenerateArray(i,array);
	}
	return array;
}

var a = GenerateArray(10);
console.log(a);
console.log(a.length);
参与回复
登录后即可参与回复。登录