Javascript-动态地向对象添加属性会导致为所有属性设置最后一个值
我循环一些日期,将它们作为属性动态添加到对象中,并为每个日期指定一个值。属性被添加,但它们最终都被设置为上次迭代时指定的值 我想有一些参考问题。我不确定问题到底出在哪里,该怎么办 以下内容也可在带有日志记录的应用程序中使用Javascript-动态地向对象添加属性会导致为所有属性设置最后一个值,javascript,loops,object,reference,Javascript,Loops,Object,Reference,我循环一些日期,将它们作为属性动态添加到对象中,并为每个日期指定一个值。属性被添加,但它们最终都被设置为上次迭代时指定的值 我想有一些参考问题。我不确定问题到底出在哪里,该怎么办 以下内容也可在带有日志记录的应用程序中使用 let dates = ['2020-04-28','2020-05-3','2020-05-16'] let pricesObj = {}; var entry = { price: 45, time_id: 2 } dates.map( d
let dates = ['2020-04-28','2020-05-3','2020-05-16']
let pricesObj = {};
var entry = {
price: 45,
time_id: 2
}
dates.map( date => {
entry.date = date
if( !(date in pricesObj)){
//Add new date entry
pricesObj[date] = []
pricesObj[date].push(entry) //<-- this seems to be assigned to all dates, not just the current
}
})
console.log('updating price with obj: ' , JSON.stringify(pricesObj));
let dates=['2020-04-28'、'2020-05-3'、'2020-05-16']
让pricesObj={};
变量项={
价格:45,,
时间:2
}
dates.map(日期=>{
entry.date=日期
如果(!(价格中的日期)){
//添加新的日期条目
pricesObj[日期]=[]
pricesObj[date]。推送(条目)/您只创建了一个条目,然后将其推送到不同的数组。每次需要条目时,请重新创建条目
dates.forEach(date => {
if (!(date in pricesObj)) {
//Add new date entry
pricesObj[date] = [{
date,
price: 45,
time_id: 2
}];
}
});
您没有为原始日期数组中的每个项目创建一个新数组,因此不要使用map。要进行迭代,请使用forEach。您只创建了一个条目,然后将其推送到不同的数组中。每次需要时都重新创建条目
dates.forEach(date => {
if (!(date in pricesObj)) {
//Add new date entry
pricesObj[date] = [{
date,
price: 45,
time_id: 2
}];
}
});
您没有为原始日期数组中的每个项目创建新数组,因此不要使用map。要进行迭代,请使用forEach。谢谢,这很有效。因此我无法在循环外部创建条目变量有点令人费解,但是,很好的提示!谢谢,这很有效。因此我无法在循环外部创建条目变量有点令人费解,但是,很好提示!