现有对象如下:
    var obj = {
        "0":11,
        "1":22
    }
请通过一个很简单的方法将obj转为数组对象[11,22],不能使用for 或者 for in 和 push 方法。
考官提示说用Array.prototype.slice可能有效,但不一定。

解决方案 »

  1.   


     var arr=new Array();
     arr.splice(0,2,obj[0],obj[1]);
      

  2.   

    另:那考官有毛病,整一个250
    这个方式循环都不能用,还不如for in呢,
      

  3.   


    var obj = {
      "0":11,
      "1":22
      }
    var a = new Array();
    var b = a.concat(a,obj[0],obj[1]);
    alert(b);
      

  4.   

    var obj = {
      "0":11,
      "1":22
      }
    obj.length = 2;
    alert(Array.prototype.slice.call(obj,0))
      

  5.   

    var obj = {
      "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%长虫子了!出题,只有用尽一切方法的,哪有不能用什么方法的。(当然有[虫子]的不算其中)
      

  6.   

    加个jquery文件吧;
    再用这个函数:json.parse()
      

  7.   


    var i=0;
    var arr = new Array();
    while (true)
    {
       if(obj[i.toString()]!=null)
       {
          arr .push(obj[i.toString()]);
       }
       else
       {
          break;
       }
       i++;//这里漏了
    }
      

  8.   


    模拟一个数组的无参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这个对象产生遍历的关键。
      

  9.   

    Array.prototype.slice 是轉換arguments參數用的,,考官知識不過關
      

  10.   

    这种方式需要对象有个length属性,即这个对象是个伪数组对象 var obj = {
    "0":11,
    "1":22,
    "name": "json",
    "length": 2
    }
    var arr = Array.prototype.slice.call(obj);具体原理自己搜javascript call查看call的用法便知