改变对象值的不可变函数

时间:2017-01-07 15:26:47

标签: javascript reactjs redux immutability

var brand = [{id:1,name:'samsung',price:1000},{id:1,name:'lg',price:2000}];
var changed = brand[0].price = 2000;

现在三星的价格等于2000并且它已经改变了,但如何在不改变品牌变量的情况下做到这一点?

或者我在redux中误解了不可变的概念?上面的代码实际上还可以吗?

2 个答案:

答案 0 :(得分:0)

使用Object#assign创建一个包含所需更改的新对象。 使用Array#slice获取尚未从原始数组更改的项目,并使用Array#concat创建新数组,而不是更改原始数据。



if(isset($_POST['data'])){ 
    // other checks
}




如果您转换代码或浏览器兼容性不是问题,则可以使用array spreadobject spread语法:



var brand = [{id:1,name:'samsung',price:1000},{id:1,name:'lg',price:2000}];

var index = 0; // changed element index

// creates a new object with the merge properties
var item = Object.assign({}, brand[index], { price: 2000 });

// creates a new array by combining the elements before the changed item, with the changed item, and the elements after the it in the right order
var changed = brand.slice(0, index) // the items before the changed item
  .concat(
    item, // the changed item
    brand.slice(index + 1) // the elements after the changed item
  );

console.log(changed);
console.log(brand); // brand haven't changed




答案 1 :(得分:0)

发现这篇很好的文章清楚地解释了我们如何使对象和数组不可变。 http://wecodetheweb.com/2016/02/12/immutable-javascript-using-es6-and-beyond/