开发者问题收集

如何更新对象数组内对象的单个值

2020-08-22
59

我试图更新对象数组内的对象中的特定值。 示例:

[
    {
        id: 1,
        service: 1001,
        country: {
            id: 1,
            countryname: India
        },
        ts: 1597758281
    },
    {
        id: 2,
        service: 1002,
        country: {
            id: 2,
            countryname: USA
        },
        ts: 1597758283
    }
]

现在,我想更新第一个对象的 country id 值,因此它会变成这样:

[
    {
        id: 1,
        service: 1001,
        country: {
            id: 2,
            countryname: USA
        },
        ts: 1597758281
    },
    {
        id: 2,
        service: 1002,
        country: {
            id: 2,
            countryname: USA
        },
        ts: 1597758283
    }
]

这是我到目前为止尝试过的方法,我获取了要更新的项目的索引。然后我创建了原始数组的副本,然后尝试更新该值。但它似乎不起作用。

handleUpdate = (event, item) => {
        const elementsIndex = this.state.laneArray.findIndex(element => element.id == item.id);

        let newArray = [...this.state.laneArray]

        if (event.target.name === "countryName") {
            newArray[elementsIndex] = { ...newArray[elementsIndex], [newArray[0].country.id]: event.target.value }
        }

        this.setState({
            laneArray: newArray,
        });
    }

我想我需要更新整个 country 对象。我该怎么做?

1个回答

获得索引后,在该索引之前和之后对数组进行切片,并在中间将 country 属性设置为具有新 ID 和现有 countryname 的对象:

const input = [
    {
        id: 1,
        service: 1001,
        country: {
            id: 1,
            countryname: 'India'
        },
        ts: 1597758281
    },
    {
        id: 2,
        service: 1002,
        country: {
            id: 2,
            countryname: 'USA'
        },
        ts: 1597758283
    }
];
const i = 0;
const newId = 2;

const output = [
  ...input.slice(0, i),
  {
    ...input[i],
    country: { id: newId, countryname: input[i].country.countryname }
  },
  ...input.slice(i + 1),
];
console.log(output);

另请注意,字符串文字需要分隔符,如 '" 或反引号。

CertainPerformance
2020-08-22