推送到数组时,值被重复
Posted
技术标签:
【中文标题】推送到数组时,值被重复【英文标题】:Values are being duplicated when being pushed to array 【发布时间】:2021-03-17 03:44:03 【问题描述】:当我运行此代码时,我得到所有条目的最后一个元素重复。我正在尝试在不和谐中添加一个新角色,并将一些关于角色详细信息 idk 的条目保存到我的 json 文件中,但我似乎做不到。
我已经添加了数据和列表变量的声明。
let data = fs.readFileSync('roles.json')
var list = JSON.parse(data)
var details = nickname:"",channel:"",message:"",role:"",emoji:"",raw:"",error:""
let sections = ['A','B','C','D']
var bar = new Promise((resolve, reject) =>
sections.forEach(async function (value, index, array)
let role = await message.guild.roles.create( data: name: `Section $value` )
details.nickname = value
details.channel = '12345567'
details.message = '1233454676'
details.role = role.id
details.error = '12443566'
list.push(details)
if (index === array.length - 1)
resolve()
);
);
bar.then(() =>
console.log(list);
);
输出
[
nickname: '',
channel: '',
message: '',
role: '',
emoji: '',
raw: '',
error: ''
,
nickname: 'D',
channel: '12345567',
message: '1233454676',
role: '784672976855498813',
emoji: '',
raw: '',
error: '12443566'
,
nickname: 'D',
channel: '12345567',
message: '1233454676',
role: '784672976855498813',
emoji: '',
raw: '',
error: '12443566'
,
nickname: 'D',
channel: '12345567',
message: '1233454676',
role: '784672976855498813',
emoji: '',
raw: '',
error: '12443566'
,
nickname: 'D',
channel: '12345567',
message: '1233454676',
role: '784672976855498813',
emoji: '',
raw: '',
error: '12443566'
]
【问题讨论】:
什么是details
,它在哪里声明?
var details = nickname:'',channel:'',message:'',role:'',emoji:'',raw:'',error:'' 声明于顶部
在将同一个对象推入list
数组之前,您似乎在反复对其进行变异。
那么我该如何解决这个问题?
请用details
和list
的声明更新您的问题
【参考方案1】:
在将同一对象的引用推入list
数组之前,您正在重复地改变同一个对象。
在每次迭代的 forEach 回调中声明一个新的 details
对象...
let sections = ['A', 'B', 'C', 'D']
const list = []
sections.forEach((value) =>
const details =
details.nickname = value
list.push(details)
);
console.log(list)
...或者如果上述方法不可行,则将details
对象的克隆推送到list
,而不是对原始details
对象的引用。
let sections = ['A', 'B', 'C', 'D']
const list = []
const details =
sections.forEach((value) =>
details.nickname = value
list.push(...details)
);
console.log(list)
【讨论】:
【参考方案2】:改用for...of
,不要在foreach
循环中使用async...await
【讨论】:
以上是关于推送到数组时,值被重复的主要内容,如果未能解决你的问题,请参考以下文章