Javascript 有没有一种方法可以在不改变其位置的情况下更改对象数组中的项?

Javascript 有没有一种方法可以在不改变其位置的情况下更改对象数组中的项?,javascript,react-native,redux,react-redux,Javascript,React Native,Redux,React Redux,我正在修改一组对象。我想改变一个项目的值。 为此,我创建了一个新对象,旧对象的一些值发生了更改。 之后,我删除数组中的旧对象,然后再删除新对象 我得到了我所期望的,但物品的位置也发生了变化(结束) 如何在不更改位置的情况下更改项目 let newMedoc = {}; newMedoc.quantite = newQuantite; newMedoc.sub_total = price; newMedoc.nom = action.value.nom; newMedoc.prix = actio

我正在修改一组对象。我想改变一个项目的值。 为此,我创建了一个新对象,旧对象的一些值发生了更改。 之后,我删除数组中的旧对象,然后再删除新对象

我得到了我所期望的,但物品的位置也发生了变化(结束)

如何在不更改位置的情况下更改项目

let newMedoc = {};
newMedoc.quantite = newQuantite;
newMedoc.sub_total = price;
newMedoc.nom = action.value.nom;
newMedoc.prix = action.value.prix;
newMedoc.id = action.value.id;
//Delete the item in the array
nextState = {
  ...state,
  basketOfMedicines: state.basketOfMedicines.filter(index => index !== action.value)
}
//concat a new item in the array
nextState = {
  ...nextState,
  basketOfMedicines: [...nextState.basketOfMedicines, newMedoc]
}
return nextState || state;
如果要替换项目,可以使用
map
而不是
filter

nextState = {...state};
nextState.basketOfMedicines = nextState.basketOfMedicines.map(entry => entry == action.value ? newMedoc : entry);

只有当你申请的职位有意义时,否则没有意义。但是您已经更改了方法中的当前状态,不应该这样做。您应该克隆阵列,例如使用lodash cloneDeep或类似的东西

您的newState.basketOfMedicine=state.basketOfMedicine.filter(…仅包含对对象的引用。请查看下面的代码以了解详细信息:

let oldState = [{a:100,b:200},{a:1000,b:2000},{a:10,b:20},{a:1,b:2},];

let arr = oldState.filter(elem => elem.a < 10); // [{a:1,b:2}]
let newState = [...arr] // destructuring
newState[0].a=50 // mutate
console.log(newState[0] === oldState[3]); // true 
lodash的使用举例来说,可能还有其他很酷的库,或者你自己编写一个克隆方法

var objects = [{ 'a': 1 }, { 'b': 2 }];

var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false