从嵌套JavaScript对象插入/删除数据

从嵌套JavaScript对象插入/删除数据,javascript,json,reactjs,Javascript,Json,Reactjs,我正在使用react.js管理嵌套项的列表。我的对象看起来是这样的: const items = [ { _id: 0, content: 'Item 1 something', note: 'Some note for item 1' }, { _id: 5, content: 'Item 1.1 something', note: 'Some note for item 1.1' }, { _id: 1, c

我正在使用react.js管理嵌套项的列表。我的对象看起来是这样的:

const items = [
  {
    _id: 0,
    content: 'Item 1 something',
    note: 'Some note for item 1'
  },
  {
    _id: 5,
    content: 'Item 1.1 something',
    note: 'Some note for item 1.1'
  },
  {
    _id: 1,
    content: 'Item 2 something',
    note: 'Some note for item 2',
    subItems: [
      {
        _id: 2,
        parent_id: 1,
        content: 'Sub Item 1 something',
        subItems: [{
          _id: 3,
          parent_id: 2,
          content: 'Sub Sub Item 4'
        }]
      }
    ]
  }
];
前提是我只有任何项目的_id。如何在我有_id的项目之前/之后插入另一个项目,在任何级别顶级或嵌套,并删除任何级别的项目,前提是我只有_id


由于我使用的是react.js,如何以不变的方式执行这些操作?

您可以为此创建递归函数。首先,您可以使用JSON parse/stringify克隆数组,这不是最好的方法,但在本例中可以使用,然后您可以使用for…in-loop-to-loop数据,如果在某个对象中找到id,它将使用unshift将新项添加到该数组的开头

const items=[{{u id:0,content:Item 1某物,note:note for Item 1},{{{u id:5,content:Item 1.1某物,note:note for Item 1.1},{{u id:1,content:Item 2某物,note:note for Item 2,subitem:[{{u id:2,parent\u id:1,content:subitem 1某物,subitem:[{{u id:3,parent:2,content:subitem 4}]] 函数addItemdata、项、id{ data=JSON.parseJSON.stringifydata 函数innerdata、项、id、父级{ 对于数据中的var i{ 如果数据[i]。\u id==id{ parent.unshiftitem 回来 } 如果数据[i]和&data[i].hasOwnProperty'subItems'{ innerdata[i]。子项,项,id,数据[i]。子项 } } } innerdata,项,id,数据 返回数据; } var newItem={ 名称:“Lorem”, 年龄:20 }
console.logaddItems,newItem,3让我们假设_id=1然后您想要删除什么??完成对象及其子项还是什么??如果_id=1,则使用结果更新您的问题。如果_id=1,则使用子项完成对象。类似地,如果我想以不可变的方式在_id=2之前和之后插入一个项,那么如何在_id=2之前和之后插入该项。如果这是一个数组,我会使用索引、拼接之类的东西,但是对于一个对象,我该怎么做呢?谢谢!如果我没有错,取消移位只在数组的开头插入。从上面插入的结果来看,如果我想在刚才添加的lorem项和_id3的项之间添加一个项,该怎么办?在这种情况下,您可以使用另一种方法,这样您就可以向函数中添加一个参数,即插入新项的索引,这样您就可以得到类似这样的结果。请注意,此函数不会更改原始数据,但会返回新数据,所以如果要再次对其运行此函数,则需要使用该新数据。