JavaScript "push" - 基本



我不明白为什么当我推送对象时数组中的所有值都会发生变化? 请参阅下面的 Chrome 控制台:

kakebo ={
title: "",
date: "",
status : "", 
solde: 0,
entry_up: [
{ name: "", amount:0},
],
entry_down: [
{ name: "", amount:0},
]
};

log : {title: ", date: ",status: ", solde: 0, entry_up: Array(1(, ...}

kakebos = [];

日志 : []

kakebo.title = "test1"

日志:"测试1">

kakebos.push(kakebo);
kakebos

日志 :[{…}]0: {title: "test1", date: "", status: "", solde: 0, entry_up: Array(1), …}

kakebo.title = "test2"

日志:"测试2">

kakebos.push(kakebo);

.log: 卡克博斯 (2) [{...}, {...}] 第 1 行 : 0 : {title: "test2", date: ", status: ", solde: 0, entry_up: Array(1(, ...} 第 2 行 : 1 : {title: "test2", date: ", status: ", solde: 0, entry_up: Array(1(, ...}

您不是在推送两个不同的对象,而实际上只是一个对象,并更改其标题。

var el = {prop:1}, arr = [];
arr.push(el);//el is added to the array
el.prop = 2;//el is changed
arr.push(el);//el is added a second time

您可以通过在添加之前复制对象来解决此问题:

arr.push(Object.assign({},el));

或者您只需设置多个对象:

var el = {prop:1}, arr = [];
arr.push(el);//el is added to the array
var el2 = {prop:2};
arr.push(el2);

最新更新