jjzjj

immutability

全部标签

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 - 在 react-js 中使用 immutable-js 时使用 PropTypes

我在React中使用immutable-js和react-immutable-proptypes。//CommentBox.jsxgetInitialState(){return{comments:Immutable.List.of({author:'PeteHunt',text:'Heythere!'},{author:'JustinGordon',text:'Alohafrom@railsonmaui'})};},render(){console.log(this.state.comments.constructor);return(Comments);}//CommentList

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 - 流: Typechecking a complex Immutable shape using fromJS()?

如何使用Flow对从fromJS生成的Immutable.JS数据结构的形状进行类型检查?可以使用对象字面量符号非常准确地键入普通的旧JSblob:typeObjectShape={a:number,b:string,c:{d:number,},e:Array};constobj:ObjectShape={//hyper-accuratea:1,b:'2',c:{d:3,},e:[4]}但是,在Immutable.js方面,似乎有两个主要的并发症:似乎Immutable.js的fromJS方法返回any(https://github.com/facebook/immutable-js/

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 与类型化的 ES6 类一起使用?

假设我有课Task和TaskGroupclassTask{constructor(publictext:string){}}classTaskGroup{constructor(publictitle:string="newtaskgroup",publictasks:Task[]=[]){}}然后在我的Angular2服务中,我将创建一个不可变的任务组列表@Injectable()classTaskService{taskGroups:Immutable.List;constructor(){this.taskGroups=Immutable.List([newTaskGroup("

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 插入嵌套对象中的数组

假设有一个对象:constobject={'foo':{'bar':[1,2,3]}}我需要将4插入object.foo.bar数组。现在我是这样做的:constinitialState=Immutable.fromJS(object)constnewState=initialState.setIn(['foo','bar',object.foo.bar.length],4)console.log(newState.toJS())但我不太喜欢它,因为我需要在路径中使用object.foo.bar.length。在我的真实示例中,对象嵌套得更深,获取数组的长度看起来非常难看。还有其他更方