今天碰到一个问题, 一个对象多次插入同个数组, 如果该对象中的某一个键值发生改变, 之前插入的所有数据都会随着最后插入的对象而改变
可能听着有点晕有点绕, 让我们来看一个简单的栗子
- var a = {
- id: 0,
- name: 'fjornan',
- age: '22',
- }
- var arr = []
- for (var i = 0; i < 10; i++) {
- a.id = i;
- arr.push(a);
- }
- console.log(arr);
这个 demo 输出的结果如下:
image.png
可以看到, 这个数组里多有对象的 id 都跟最后一个插入的一样, 都变成了 9, 该怎么解决呢? 请看如下代码:
- var a = {
- id: 0,
- name: 'fjornan',
- age: '22',
- }
- var arr2 = []
- for (var i = 0; i < 10; i++) {
- var obj = {}
- for (var key in a) {
- obj[key] = a[key];
- }
- obj.id = i;
- arr2.push(obj);
- }
- console.log(arr2);
image.png
只需在插入前重新声明一个新的对象 obj, 将原对象 a 的内容插入到新对象中 obj, 再将新对象 obj 插入到数组中即可
来源: http://www.jianshu.com/p/6b8189cea65e