草庐IT

Immutability

全部标签

javascript - 如何使用 Immutable.js 从 javascript 原始对象创建记录映射?

我是immutable.js的新手,我想更好地了解如何使用从原始JS对象开始的记录。使用Immutable.fromJS()我可以创建一个传递原始对象的映射,例如:varimages={"1":{id:"1",urls:["/medium/1.jpg","/large/1.jpg"]},"2":{id:"2",urls:["/medium/1.jpg","/large/1.jpg"]}}varimagesMap=Immutable.fromJS(images);imagesMap现在是包含其他map的map,每个map对应一张map。我想创建一个包含记录的map,例如使用定义为Imag

javascript - 两个不可变列表——如何使三重相等起作用?

假设我们有一个使用Facebook的伟大Immutable.js创建的不可变对象(immutable对象).我想比较使用.map或.filter从单一来源生成的两个列表,并确保它们相等。在我看来,当您使用map/filter时,您正在创建一个与先前对象无关的新对象。如何使三重相等===起作用?这有什么意义吗?varlist=Immutable.List([1,2,3]);varlist1=list.map(function(item){returnitem;})varlist2=list.map(function(item){returnitem;})console.log("LIST

javascript - 在 react 状态下替换数组中的对象

这个问题可能有点属于“最佳实践”问题,但请耐心等待。这是我的状态的一部分:this.state={typeElements:{headers:[{name:"h1",size:70,lineHeight:1.25,kearning:0,marginAfter:0},{name:"h2",size:70,lineHeight:1.25,kearning:0,marginAfter:0},{name:"h3",size:70,lineHeight:1.25,kearning:0,marginAfter:0}...我需要做的是替换header数组中给定索引处的对象。我不知道如何使用this.

javascript - 如何实现不变性

我正试图掌握trie是如何实现的并且实现了不变性,这与JS中的不变性有关。我理解应该如何进行重要的结构共享。我的问题是说你有一个像这样的图结构:a--b|c|d--h|e--i--l|f--j--m|g--k--n然后您向系统添加一个x。我将尝试两种不同的方式:a--b|c|d--h--x|e--i--l|f--j--m|g--k--n那个只是作为叶节点添加的。a--b|c|d--h|x|e--i--l|f--j--m|g--k--n那个被添加在路径的中间。我想知道处理这两种情况的不可变数据结构是什么。所以本质上我们有一个函数f:graph->graph'将图形更改为“新图形”,在引擎

javascript - 有什么方法可以将 immutable.js 与 lodash 一起使用?

我正在使用immutable.js与我的通量应用程序。它非常有用,可以提高性能。但真正让我难过的是我不能使用lodash。和它一起。Lodash提供了很棒的AP​​I和大量有用的功能,所以我想知道是否有办法将它们组合在一起为我工作? 最佳答案 你可以使用Ramda如果您想要不变性和无副作用的函数。该库提供类似于lodash的有用功能,但采用从不改变用户数据的函数式编程风格。考虑thisReactexample使用ES6语法在Ramda中使用flatten函数。import{flatten}from'ramda';constusers

javascript - 有什么方法可以防止替换 JavaScript 对象属性?

我想让一个对象的结构不可变,以防止其属性随后被替换。但是,这些属性需要是可读的。这可能吗?我确定没有语言特性(如Java中的final和C#中的readonly行)来支持这一点,但想知道是否可能有另一种机制为了达到同样的结果?我正在寻找类似的东西:varo={a:"a",f:function(){return"b";}};varp=o.a;//OKo.a="b";//Errorvarq=o.f();//OKo.f=function(){//Errorreturn"c";}; 最佳答案 ECMAScript5将有seal()和free

javascript - 从嵌套对象中删除数据而不改变

是否有任何优雅的方法可以从属于数组的数组中删除对象?我已经使用React和Redux有一段时间了,但每次我必须在不改变状态的情况下删除或插入数据时都会卡住几个小时。reducer是一个数组,其中包含具有ID的对象和另一个包含对象的数组,如下所示:[{id:123,items:[{id:abc,name:albert},...]},...]我收到了两个ID,需要删除ID为abc的项目。 最佳答案 通过id从数组中删除一个项目:returnstate.filter(item=>item.id!==action.id)通过id从对象中删除

javascript - 在 Immutable.js 中解析嵌套记录

假设我使用Immutable.js定义了以下记录:varAddress=Immutable.Record({street:'',city:'',zip:''});varUser=Immutable.Record({name:'',address:newAddress()});如何将纯javascript对象转换为用户记录?我尝试了以下但它没有产生预期的输出:varuser=newUser({name:'Foo',address:{street:'Bar',city:'Baz'}});//=>Record{"name":"Foo","address":[objectObject]}我知道

javascript - 有没有办法卡住 ES6 map ?

我正在寻找一种卡住原生ES6map的方法。Object.freeze和Object.seal似乎不起作用:letmyMap=newMap([["key1","value1"]]);//Map{'key1'=>'value1'}Object.freeze(myMap);Object.seal(myMap);myMap.set("key2","value2");//Map{'key1'=>'value1','key2'=>'value2'}这是预期的行为,因为卡住卡住了objects和maps的属性不是objects或者这可能是一个错误/尚未实现?是的,我知道,我可能应该使用Immutab

javascript - 按字母顺序排序 immutable.js

我想按属性name对immutable.jsorderedList进行排序,data.map(x=>x.get("name"))返回字符串,我想按字母顺序按名称对我的map进行排序。该怎么做?我试过了:returndata.sortBy((val)=>{if(dir==="up"){returnval.get("name");}else{return-val.get("name");}}); 最佳答案 varfiends=Immutable.fromJS([{name:'Squirrel'},{name:'Cat'},{name:'