Javascript 按索引更改数组值重复问题?
我想更新匹配“key”的对象数组的值。find索引正在工作,但它实际上是在推送值,而不是替换值Javascript 按索引更改数组值重复问题?,javascript,reactjs,Javascript,Reactjs,我想更新匹配“key”的对象数组的值。find索引正在工作,但它实际上是在推送值,而不是替换值 this.state.data = thedata Array [ Object { "key": "-Lu2u6ib92Ay8Pw1O-3m", "question": "1", }, Object { "key": "-Lu2u8kZRs2E4X4TgxZd", "question": "4", }, Object { "key":
this.state.data = thedata Array [
Object {
"key": "-Lu2u6ib92Ay8Pw1O-3m",
"question": "1",
},
Object {
"key": "-Lu2u8kZRs2E4X4TgxZd",
"question": "4",
},
Object {
"key": "-Lu2u7z4--ImiPSkWa1B",
"question": "3",
},
this.state.data[this.state.data.findIndex(el => el.key === '-Lu2u7z4--ImiPSkWa1B')] = 'totototot';
实际输出将值推送到索引,但不替换它:
this.state.data = thedata Array [
totototot,
Object {
"key": "-Lu2u6ib92Ay8Pw1O-3m",
"question": "1",
},
Object {
"key": "-Lu2u8kZRs2E4X4TgxZd",
"question": "4",
},
Object {
"key": "-Lu2u7z4--ImiPSkWa1B",
"question": "3",
},
预期产出:
this.state.data = thedata Array [
Object {
"key": "-Lu2u6ib92Ay8Pw1O-3m",
"question": "1",
},
Object {
"key": "-Lu2u8kZRs2E4X4TgxZd",
"question": "4",
},
totototot,
您可以将键-Lu2u7z4--ImiPSkWa1B'的
问题
值替换为:
let数据=[{
“密钥”:“-Lu2u6ib92Ay8Pw1O-3m”,
“问题”:“1”
}, {
“键”:“-Lu2u8kZRs2E4X4TgxZd”,
“问题”:“4”
}, {
“密钥”:“-Lu2u7z4--ImiPSkWa1B”,
“问题”:“3”
}];
console.log(“之前:”,数据);
//其中'data'是'this.state.data'`
replaceValue(数据,'key','-Lu2u7z4--ImiPSkWa1B','question','tototot');
console.log(“后面:”,数据);
replaceEntry(数据,'key','-Lu2u7z4--ImiPSkWa1B',
//不管你想要什么…(只是看起来一样)
{
键:'-Lu2u7z4--IMIPSKW1B',,
问题:“托托托”
}
);
函数replaceValue(数据、sourceKey、sourceValue、targetKey、targetValue){
数据[data.findIndex(el=>el[sourceKey]==sourceValue)][targetKey]=targetValue;
}
函数replaceEntry(数据、sourceKey、sourceValue、targetValue){
数据[data.findIndex(el=>el[sourceKey]==sourceValue)]=targetValue;
}
作为控制台包装{top:0;最大高度:100%!important;}
可以理解的方式
const数据=[{
“密钥”:“-Lu2u6ib92Ay8Pw1O-3m”,
“问题”:“1”
}, {
“键”:“-Lu2u8kZRs2E4X4TgxZd”,
“问题”:“4”
}, {
“密钥”:“-Lu2u7z4--ImiPSkWa1B”,
“问题”:“3”
}];
函数replaceItemHavingKeyAByB(数组,a,b){
返回array.map(元素=>{
如果(element.key==a){
返回b;
}否则{
返回元素;
}
});
}
console.log(
替换项具有keyabyb(数据,“-Lu2u7z4--ImiPSkWa1B”,“tototo”)
);代码>这不是有效的JSON/JavaScript。不要使用对象数组,只需使用简单的键值映射即可。也许您可以添加一个示例。。。这些答案中有没有一个能为你提供解决方案?如果是,请接受该答案,否则请提供清晰、简洁的注释说明原因。您的问题和预期输出不匹配,您的所有代码(包括预期结果)都是格式错误的JavaScript对象。请用功能代码和您意图的清晰性来澄清这个问题。如果我想更改Entr对象,而不仅仅是目标值?@manyouuwx,我会更新。上面的replaceEntry()
函数实际上与原始代码相同。我也有同样的问题。它不是替换而是推动..它不能推动,上面的例子按预期工作。它不可能在推送,因为我没有调用Array.prototype.push
。事实上,我发现了问题,你能读到吗?这似乎不能解决问题,但会用string替换对象如果你看到他预期的输出,那就是他想要的@markschultheisah是的,他格式错误的数组确实有这个,对不起,我误读了刚才所说的和示例中的内容。我将投票表决这个问题,因为我不清楚问题是什么。没问题:)@MarkSchultheiss