如何在React Native中的其他对象数组内的对象数组中添加值?

时间:2018-10-30 02:03:27

标签: reactjs react-native

我是React native的新手,我想在另一个对象数组内的对象数组内添加值。我有这样的数据:

dataAttribute: [
        {
          id: 1,
          title: 'A',
          data: [
            { id: '1', name: 'First Name', type: 'text' },
            { id: '2', name: 'Last Name', type: 'text' },
          ],
        },
        {
          id: 2,
          title: 'B',
          data: [
            { id: '1', name: 'Twitter', type: 'text' },
            { id: '2', name: 'Twitter follower', type: 'number' },
          ],
        }
      ]

我想在子数组中添加参数'statusSelected == true',

dataAttribute: [
        {
          id: 1,
          title: 'A',
          data: [
            { id: '1', name: 'First Name', type: 'text', statusSelected: true},
            { id: '2', name: 'Last Name', type: 'text' },
          ],
        },
        {
          id: 2,
          title: 'B',
          data: [
            { id: '1', name: 'Twitter', type: 'text' },
            { id: '2', name: 'Twitter follower', type: 'number' },
          ],
        }
      ]

3 个答案:

答案 0 :(得分:2)

尝试

dataAttribute = [
    {
      id: 1,
      title: 'A',
      data: [
        { id: '1', name: 'First Name', type: 'text' },
        { id: '2', name: 'Last Name', type: 'text' },
      ],
    },
    {
      id: 2,
      title: 'B',
      data: [
        { id: '1', name: 'Twitter', type: 'text' },
        { id: '2', name: 'Twitter follower', type: 'number' },
      ],
    }
  ]

const changeMe = (dataAttribute, attrId, dataId) => dataAttribute.map(x => x.id === attrId ? {...x, data: x.data.map(y => y.id === dataId ? {...y, statusSelected: true} : y)} : x)

console.log(changeMe(dataAttribute, 1, "1"))

输出:

[ { "id": 1, "title": "A", "data": [ { "id": "1", "name": "First Name", "type": "text", "statusSelected": true }, { "id": "2", "name": "Last Name", "type": "text" } ] }, { "id": 2, "title": "B", "data": [ { "id": "1", "name": "Twitter", "type": "text" }, { "id": "2", "name": "Twitter follower", "type": "number" } ] }

为结果附加了JsFiddle

答案 1 :(得分:1)

您可以映射到数组,直到找到要在其中添加额外数据的元素。假设您知道要在其中添加信息的ID和子ID:

const updatedDataAttribute = dataAttribute.map((item) => {
  if (item.id === <desired item id>) {
    return {
      ...item,
      data: item.data.map((datum) => {
        if (datum.id === <desired sub item id>) {
          return {
            ...datum,
            statusSelected: true,
          }                
        }

        return datum
      }),
    }
  }

  return item
})

答案 2 :(得分:0)

实现此目的的一种简单方法是,通过在数据数组的第一项上将statusSelected属性定义为true来简单地使对象变异。

因此,假设您在这样的对象中定义了dataAttribute

  var object = {
    dataAttribute: [
    {
      id: 1,
      title: 'A',
      data: [
        { id: '1', name: 'First Name', type: 'text' },
        { id: '2', name: 'Last Name', type: 'text' },
      ],
    },
    {
      id: 2,
      title: 'B',
      data: [
        { id: '1', name: 'Twitter', type: 'text' },
        { id: '2', name: 'Twitter follower', type: 'number' },
      ],
    }
  ]
  }

   // add statusSelected to the first item of the nested data array
   object.dataAttribute[0].data[0].statusSelected = true;

这将产生您需要的更新对象。