参考下面的代码
var init = {
0: {
id: '1'
},
1: {
id: '2'
}
}
var obj = {};
for (var i in init){
.......
}
现在是需求就是有一个对象的变量
我知道.push()
对象并不能调用
所以想会不会有什么方法能跟数组一样能使用.push()
方法?
参考下面的代码
var init = {
0: {
id: '1'
},
1: {
id: '2'
}
}
var obj = {};
for (var i in init){
.......
}
现在是需求就是有一个对象的变量
我知道.push()
对象并不能调用
所以想会不会有什么方法能跟数组一样能使用.push()
方法?
var init = {
0: {
id: '1'
},
1: {
id: '2'
}
}
var obj = {};
for (var i in init){
obj[i] = init[i]
};
这样就可以了吧!不知道是否满足你的需求。
首先你需要把这个对象变成一个类数组对象,给它再加个属性, 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]);
}
这样在遍历的时候会多出 length
和 push
,自己过滤一下就好了
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
属性
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
当然可以了,但是需要给对象添加一个
length
的属性,至于为什么可以这么做,去看看v8源码中对push
的定义就好,简单来说只要满足key
是number
的,并且还有length
属性就可以用push
。