【发布时间】:2020-08-05 22:26:09
【问题描述】:
我有多个下拉菜单,我正在尝试更新数组中存在的对象的值
我的onChange如下
onChange={e => {
const answer = {
id: questionChoice.id,
name: questionChoice.text,
value: e,
}
let newAnswer = {
...currentAnswer,
}
if (!currentAnswer.value) {
newAnswer.value = [] // init empty array
}
if (index in newAnswer.value) {
console.log('found')
console.log('here', index in newAnswer.value)
newAnswer.value = newAnswer.value.filter(item => item.value !== answer.value)
}
newAnswer.value = [...newAnswer.value, { [questionChoice.text]: answer.value }]
console.log('new answer', newAnswer)
updateCurrent(newAnswer)
}}
optionFilterProp="children"
onFocus={onFocus}
onBlur={onBlur}
filterOption={(input, option) =>
option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
>
我目前的输出是这样的
newAnswer.value: [
0: {Inform producers about the range of sustainability practices: "1"}
1: {Inform producers about environmental management: "7"}
2: {Provide mentoring services to new advisors: "12"}
3: {Inform producers about the range of sustainability practices: "2"}
]
预期的输出是
newAnswer.value: [
0: {Inform producers about the range of sustainability practices: "2"}
1: {Inform producers about environmental management: "7"}
2: {Provide mentoring services to new advisors: "12"}
]
现在它正在附加来自 newAnswer.value = [...newAnswer.value, { [questionChoice.text]: answer.value }] 的任何新结果
但是我找到了正确的对象
if (index in newAnswer.value) {
console.log('found')
// replace object here
newAnswer.value = newAnswer.value.filter(item => item.value !== answer.value)
}
只是不确定如何就地更改特定对象
【问题讨论】:
-
您的输出不是任何有效的已知格式
-
它是一个对象数组?
-
什么是
index,它来自哪里,为什么要使用in运算符? -
至少:
if (index in newAnswer.value) {是错误的,因为index是全局的。您需要先将索引声明为本地,通常在其前面加上let。 -
然而,你实际上并没有使用
index,所以至少这是可疑的。
标签: javascript oop ecmascript-6