2016-09-14 112 views
0
let items = state.refundHistory.items.map((o, idx) => { 
    o.body.payment.loader = true; 
    return o; 
}); 

现在我想更新状态中可用的项目,并希望返回修改后的数据状态。我们如何更新javascript中特定对象的对象?

+0

中有什么方法的问题,你有试过吗? – Rajesh

+0

我有旧状态的项目,并希望在项目加载器中添加一个键:true,那么我的项目将被更新,我想返回状态与具有加载器键的新项目。 – user6160824

+0

我的意思是,在您分享的代码中,是否存在问题?你正在使用'.map',所以你正在返回新的列表。如果您想更新同一个对象,请尝试'.forEach' – Rajesh

回答

0

你可以只重新分配

let items = state.refundHistory.items.map((o, idx) => { 
    o.body.payment.loader = true; 
    return o; 
}); 
state.refundHistory.items = items; 
return state; 

你也可以处理这种内嵌太

state.refundHistory.items = state.refundHistory.items.map((o, idx) => { 
    o.body.payment.loader = true; 
    return o; 
}); 

return state; 

但是您最好使用.forEach。这将节省不得不分配一个新的数组。

state.refundHistory.items.forEach(item => { 
    item.body.payment.loader = true; 
}); 
return state; 

一些库,如终极版要求您创建一个全新的对象在这种情况下,运营商蔓延是非常方便的

let items = state.refundHistory.items.map((o, idx) => { 
    o.body.payment.loader = true; 
    return o; 
}); 

return { 
    refundHistory : { 
     items : items, 
     ...state.refundHistory 
    }, 
    ...state, 
} 
+0

'.forEach'有什么问题? – Rajesh

+0

什么都没有。我总是使用'.forEach'。 – Stewart

+0

您已使用'.map',然后设置新值。这是'.forEach'理想的情况。' – Rajesh