如何更新数组中的 json 对象?

新手上路,请多包涵

我有一个对象数组,我想更新其中的一些内容。我想我可以通过对象映射,找到我正在寻找的匹配项,而不是更新它。

 data = data.map(obj => {
   return this.state.objToFind === obj.title;
   }).map(obj, idx) => {
      console.log("found " + obj.title);     // reads found + undefined?
      obj.menu = this.state.menu;
      obj.title = this.state.title;
      obj.content = this.state.content;
 });

但是,这是行不通的。我找到了对象,但 obj.anything 未定义。我的 console.log 显示“发现未定义”。

原文由 user3622460 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 489
2 个回答

更简单

您可以使用 some 运算符。 (它通过迭代数组来工作,当你返回 true 时它会跳出循环)

 data.some(function(obj){
   if (obj.title ==== 'some value'){
        //change the value here
        obj.menu = 'new menu';
        obj.title = 'new title';
        return true;    //breaks out of he loop
   }
});

原文由 Manish Poduval 发布,翻译遵循 CC BY-SA 3.0 许可协议

data.map(obj => {
  return this.state.objToFind === obj.title;
})

第一个映射将返回 true 和 false 的数组,第二个映射将循环遍历这些值, console.log("found " + obj.title) 将因此打印“found + undefined”。

也许你想要这样的东西。

 data = data.filter(obj => {
   return this.state.objToFind === obj.title;
   }).map(obj, idx) => {
      console.log("found " + obj.title);
      obj.menu = this.state.menu;
      obj.title = this.state.title;
      obj.content = this.state.content;
      return obj;
 });

原文由 Karim 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题