jjzjj

immutability

全部标签

javascript - 使用 D3.js 和 Immutable.js

在我的应用程序中,我使用D3.js进行一些可视化。现在,D3使用可变原生JavaScript数据结构。因此,为了与Immutable.js一起工作,需要进行一些数据编码。我还将Reflux与React结合使用,因此在我的Store中我管理了一个不可变映射。由于此map在每次更改时都会成为新事物,我不能只将它传递给D3ForceLayout,因为它适用于可变数据,因此每次它都会从头开始重新计算所有内容。我最终管理不可变和可变数据结构,但这感觉很不对。我找到了一篇文章,PracticalTimeSeriesVisualizationusingD3+OM,这似乎触及了主题并建议使用游标。问题

javascript - 将 React 的不可变助手与 Immutable.js 结合使用

我正在研究助焊剂应用,正在考虑采用immutable.js保持状态。我看到React提供了自己的帮助程序来更新不可变对象(immutable对象)(http://facebook.github.io/react/docs/update.html),但无法说出它与不可变对象(immutable对象)自己的setIn和updateIn方法有何不同(即,我已经可以将对象与===进行比较,如果它们随setIn改变)。是否有理由将react助手与immutable.js一起使用?它只是语法糖吗?TL;DR是:varmap=Immutable.fromJS({bar:'baz'});map2=Re

javascript - 为什么 immutable.js 类不需要 "new"?

例如,这是非常好的代码。(风格为ES6)import{List}from'immutable';console.log(List());//List[]然而,这失败了。classFoo{}Foo();//TypeError:Cannotcallaclassasafunction此外,这也失败了。classFooextendsList{}Foo();//TypeError:Cannotcallaclassasafunction 最佳答案 看起来immutable的魔力发生在他们对转译器的自定义插件中here.他们基本上是在创建自己的c

javascript - JavaScript 中的不可变哈希和数组实现?

javascript中是否有简单的不可变哈希和数组实现?我不需要最好的速度,比克隆更好的合理速度就可以了。另外,如果有简单的Java或一些其他语言的实现可以容易理解并移植到JavaScript,那也很好。更新:目标不仅仅是卡住散列(或数组),而是高效地实现更新操作——不可变散列的更新应该返回一个新的不可变散列。而且它应该比“克隆原始文件并更新它”更有效。原生JS类型的更新复杂度为O(1),克隆复杂度为O(n),特殊不可变数据结构(我要求的)为0(log(n))UPDATE2:JavaScript已经有了Array/Hash:是的,但它们是可变的,我需要类似但不可变的东西,基本上可以通过

javascript - 如何在 Redux reducer 中以不可变的方式交换数组元素?

相关的Redux状态由表示层的对象数组组成。示例:letstate=[{id:1},{id:2},{id:3}]我有一个名为moveLayerIndex的Redux操作:actions.jsexportconstmoveLayerIndex=(id,destinationIndex)=>({type:MOVE_LAYER_INDEX,id,destinationIndex})我希望reducer通过交换数组中元素的位置来处理操作。reducers/layers.jsconstlayers=(state=[],action)=>{switch(action.type){case'MOVE

javascript - Immutable.js - 惰性序列

我最近听说了Facebook的Immutable.js库(https://github.com/facebook/immutable-js)。我对他们文档中的以下内容感到困惑:varoddSquares=Immutable.Sequence(1,2,3,4,5,6,7,8).filter(x=>x%2).map(x=>x*x);console.log(oddSquares.last());Inthisexample,nointermediatearraysareevercreated,filterisonlycalledtwice,andmapisonlycalledoncefilte

javascript - 复制对象数组并在不修改原始数组的情况下进行更改

我有一个对象数组。我想深入复制对象数组并对每个对象进行一些更改。我想在不修改原始数组或该数组中的原始对象的情况下执行此操作。这就是我的做法。然而,作为JavaScript的新手,我想确保这是一个好的方法。有更好的方法吗?constusers=[{id:1,name:'Jack',approved:false},{id:2,name:'Bill',approved:true},{id:3,name:'Rick',approved:false},{id:4,name:'Rick',approved:true}];constusers2=users.map((u)=>{returnObjec

javascript - Immutable.js map 集与更新

我想更改我拥有的map中某个键的值。如果我要求更新的key不存在,使用update会给我一个错误,除了这个事实之外,使用update有什么好处(如果有的话)设置?我发现set明显更简洁/更清晰。事实上,根据文档,人们可以(盲目地)争辩说set实际上比update更有效,因为set不必执行updater函数的get。 最佳答案 当您的新值是当前值转换的结果时,update更强大:constinc=(x)=>(x+1)constm=Immutable.Map({a:1,b:2,c:3})m.update('b',inc)#=>{a:1,

JavaScript const 关键字

JavaScript中的const关键字是否创建对不可变数据结构的不可变引用?[我假设JavaScript中存在不可变数据结构。]对于string它似乎是这样做的:varx="asdf";constconstantX=x;alert("beforemutation:"+constantX);x="mutated"alert("aftermutation:"+constantX);输出:beforemutation:asdfaftermutation:asdfhttp://jsfiddle.net/hVJ2a/ 最佳答案 首先你不是在

javascript - 使用 ReadonlyMap<K, V> 类型

TypeScript定义了ReadonlyMap接口(interface)是标准JavaScript的不可变版本Map类型。我们应该如何使用ReadonlyMap在我们的代码中?它不是派生自任何东西,也没有声明构造函数。那么,我们真的应该这样做吗:publicpublicApiMethod():ReadonlyMap{constmap:Map=newMap(...);returnmapasReadonlyMap;}或者有更好的方法来使用ReadonlyMap而不仅仅是类型转换? 最佳答案 简短回答:您做对了。ReadonlyMap本