现有对象如下:
var obj = {
"0":11,
"1":22
}
请通过一个很简单的方法将obj转为数组对象[11,22],不能使用for 或者 for in 和 push 方法。
考官提示说用Array.prototype.slice可能有效,但不一定。
var obj = {
"0":11,
"1":22
}
请通过一个很简单的方法将obj转为数组对象[11,22],不能使用for 或者 for in 和 push 方法。
考官提示说用Array.prototype.slice可能有效,但不一定。
var arr=new Array();
arr.splice(0,2,obj[0],obj[1]);
这个方式循环都不能用,还不如for in呢,
var obj = {
"0":11,
"1":22
}
var a = new Array();
var b = a.concat(a,obj[0],obj[1]);
alert(b);
"0":11,
"1":22
}
obj.length = 2;
alert(Array.prototype.slice.call(obj,0))
"0":11,
"1":22
};
var i=0;
var arr = new Array();
while (true)
{
if(obj[i.toString()]!=null)
{
arr .push(obj[i.toString()]);
}
else
{
break;
}
}不知 这样写行不? 但我可能肯定:出这题的人 脑袋99.9999%长虫子了!出题,只有用尽一切方法的,哪有不能用什么方法的。(当然有[虫子]的不算其中)
再用这个函数:json.parse()
var i=0;
var arr = new Array();
while (true)
{
if(obj[i.toString()]!=null)
{
arr .push(obj[i.toString()]);
}
else
{
break;
}
i++;//这里漏了
}
模拟一个数组的无参Slice方法如下:
Array.prototype.slice = function () {
var arr = [];
for (var i = 0;i < this.length;i++) {
arr.push(this[i]);
}
return arr;
};可以看到,调用obj.Slice时,this就是obj,[]运算符无视引号——无论是obj[1]还是obj["1"],都可以得到22,于是得到元素,产生新数组。length属性就是对obj这个对象产生遍历的关键。
"0":11,
"1":22,
"name": "json",
"length": 2
}
var arr = Array.prototype.slice.call(obj);具体原理自己搜javascript call查看call的用法便知