Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按索引更改数组值重复问题?_Javascript_Reactjs - Fatal编程技术网

Javascript 按索引更改数组值重复问题?

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":

我想更新匹配“key”的对象数组的值。find索引正在工作,但它实际上是在推送值,而不是替换值

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