如何使用immutability-helper更新数组中的嵌套对象?

时间:2017-08-17 10:26:01

标签: arrays reactjs immutability

我有一个对象数组,分析也是一个对象数组。

const products = [
    {
        id: '111',
        analysis: [
            { id: 1, value: 51 },
            { id: 2, value: 40 },
            { id: 3, value: 25 }
        ]
    },
    {
        id: '222',
        analysis: [
            { id: 1, value: 77 },
            { id: 2, value: 99 },
            { id: 3, value: 22 }
        ]
    }
]

我是不变的助手。我有一个数组operations,表示如何更新products数组。

const operations = [
    { id: '111', analysisId: 1, value: 10 },
    { id: '111', analysisId: 3, value: 4 },
    { id: '222', analysisId: 3, value: 88 }
];

所以这意味着我希望找到id = 111的对象,然后找到analysisId = 1,最后将值从51更新为10.然后我需要对其余的事情做同样的事情2次操作。我不想改变products数组。有人会帮助我吗?谢谢!

1 个答案:

答案 0 :(得分:1)

据我所知,只有这样做才能在进行更新之前找到索引

operations.map(operation => {
    var indexOfProduct = products.findIndex(x => x.id === operation.id);
    var indexOfAnalysis = products[indexOfProduct].analysis.findIndex(a => a.id === operation.analysisId);
    products = update(products, {
        [indexOfProduct]: {
            analysis: {
                [indexOfAnalysis]: {
                    value: {$set: operation.value}
                    }                   
                }
            }
        })  
});