首页 > JavaScript 怎么使用Array的push?

JavaScript 怎么使用Array的push?

参考下面的代码
var init = {
    0: {
        id: '1'
    },
    1: {
        id: '2'
    }
}

var obj = {};

for (var i in init){
    .......
}

现在是需求就是有一个对象的变量
我知道.push()对象并不能调用
所以想会不会有什么方法能跟数组一样能使用.push()方法?


当然可以了,但是需要给对象添加一个length的属性,至于为什么可以这么做,去看看v8源码中对push的定义就好,简单来说只要满足keynumber的,并且还有length属性就可以用push

init.length = Object.keys(init).length;
Array.prototype.push.call(init, {id: 3});

https://github.com/v8/v8/blob...

补充最高票内容 push的实现

  var array = TO_OBJECT(this);
  var n = TO_LENGTH(array.length);
  var m = arguments.length;

  // Subtract n from kMaxSafeInteger rather than testing m + n >
  // kMaxSafeInteger. n may already be kMaxSafeInteger. In that case adding
  // e.g., 1 would not be safe.
  if (m > kMaxSafeInteger - n) throw %make_type_error(kPushPastSafeLength, m, n);

  for (var i = 0; i < m; i++) {
    array[i+n] = arguments[i];
  }

  var new_length = n + m;
  array.length = new_length;
  return new_length;

this需要的条件只是length属性


首先你需要把这个对象变成一个类数组对象,给它再加个属性, length:2 ,此时这个对象就变成了具有一些数组方法的类数组对象,然后使用Array.prototype.push.call()方法调用数组的push方法即可


var init = {
    0: { id: "1" },
    1: { id: "2" }
};

init.length = 2;
init.push = Array.prototype.push.bind(init);

init.push({ id: "3"});

for (var i in init) {
    console.log(i, init[i]);
}

这样在遍历的时候会多出 lengthpush,自己过滤一下就好了


var init = {
    0: {
        id: '1'
    },
    1: {
        id: '2'
    }
}
var obj = {};
for (var i in init){
    obj[i] = init[i]
};

这样就可以了吧!不知道是否满足你的需求。

【热门文章】
【热门文章】