代码改变世界

js题目(嵌套数组)的思路与解法

2011-08-29 20:15  starlightliu  阅读(753)  评论(0)    收藏  举报

题目:假如定义一个嵌套数组

x = [1,[2,3,[4,5]],6,[7]];

要求定义一个函数fun(arr,num),返回如下结果

fun(x,1):[1,6]

fun(x,2):[2,3,7]

fun(x,3):[4,5]
 

思路:将x想象成一个盒子,中括号想象成外壳,每次剥离最外面的外壳,然后输出没有外壳包裹的数字。
 

要点:判断是否有外壳(是否是数组)

function isArray(o){
	return Object.prototype.toString.call(o) === '[object Array]';
}


解法:

x = [1,[2,3,[4,5]],6,[7]];

function isArray(o){
	return Object.prototype.toString.call(o) === '[object Array]';
}


function test(a,n){
	var t1 = t2 = a,
		res,
		length;
	while(n--){
		res = [];
		t1 = t2;
		t2 = [];
		length = t1.length;
		for(var i = 0;i<length;i++){
			if(isArray(t1[i])){
				t2 = t2.concat(t1[i]);
			} else {
				res.push(t1[i]);
			}
		}
	}
	
	return res;
}
alert(test(x,1));
alert(test(x,2));
alert(test(x,3));