当前位置: 首页 > 知识库问答 >
问题:

我可以使用不可变的解构赋值吗。js?

谭铭
2023-03-14

对于标准JS对象,可以使用解构赋值,例如:

let obj = {name: 'james', code: '007'}
let {name, code} = obj // creates new variables 'name' and 'code' (with the proper values)

正如一些Flux/Redux传教士所建议的,我使用immutable。我的应用程序的js;我可以在不可变列表/映射上也使用解构吗?当然,我们可以做到:

let obj = immutable.fromJS({name: 'james', code: '007'})
let {name, code} = obj.toJS()

但是,随着对象变得越来越大,这似乎效率很低(因为首先需要对对象进行深度JS化)。

共有1个答案

张光辉
2023-03-14

对于不可变列表,分解工作非常直接。这是因为数组的解构作用于每个iterable(检查某些内容是否是iterable),而不仅仅是js数组。

有了地图,情况就更复杂了。与List不同,Map-like结构的解构只受普通JShtml" target="_blank">对象的约束,仅此而已。目前,ES社区似乎并不认为这是一个好主意(参见https://esdiscuss.org/topic/extensible-destructuring-proposal)

但是,有一个babel插件可以实现这一点:https://github.com/vacuumlabs/babel-plugin-extensible-destructuring在中安装并启用此插件。babelrc,您可以简单地修补不可变映射以获得@@获取定义的方法:

// main.js, first file loaded
import {Iterable} from 'immutable';
Iterable.prototype[Symbol.for('get')] = function(value) {return this.get(value); };

而且一切都正常(也可以嵌套解构,或使用默认值解构)

import {fromJS} from 'immutable';
const map = fromJS({author: {name: {first: "John", last: "Doe"}, birthdate: "10-10-2010"}});
const {author: {name: {first, last}, birthdate}} = map;

免责声明:我是上述插件的作者之一。

 类似资料:
  • 数组的解构赋值 基本用法 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。 以前,为变量赋值,只能直接指定值。 var a = 1; var b = 2; var c = 3; ES6允许写成下面这样。 var [a, b, c] = [1, 2, 3]; 上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值。 本质上,这种写法属

  • 我有一个实体,它的字段可以是存储为字符串的整数,也可以是GUID。我根据字段是GUID还是整数执行不同的方法。如果值是GUID,则可以确保int.TryParse始终返回false。NewGuid()是否返回可解析的整数?

  • 问题内容: 我有一个表,其中通过不存在的CSS类通过jQuery显示/隐藏整列: 有了这个DOM,我可以通过jQuery在一行中完成此操作: 这很好用,但是使用未定义的CSS类是否有效?我应该为此创建一个空类吗? 是否有任何副作用或有更好的方法来做到这一点? 问题答案: “ CSS类”是用词不当;是您分配给HTML元素的属性(或就脚本而言的属性)。换句话说,你在你的情况下,“目标”类HTML,CS

  • 问题内容: 我是JPA的新手。 根据我的理解,JPA是规范,Hibernate实现JPA并提供附加功能以及JPA方法。 但是我正在阅读JPA教程,其中使用对象可以对数据执行CRUD,而无需使用Hibernate库! 所以任何人都可以让我知道 是否可以单独使用JPA 而不使用Hibernate 来使用方法? 请提及一些有用的链接或示例。 非常感谢您的回应。 谢谢。 问题答案: 您是正确的JPA是规范

  • 我想知道我是否可以在任何web服务器上安装或使用Laravel PHP框架,而不必每次都使用Composer(PHP包/依赖关系管理器)? 我希望能够将我的应用程序放到任何web服务器上(就像不访问命令行的共享服务器)。 如果我第一次(本地)运行,那么所有依赖项都应该存在,对吗? 然后,我应该能够把它放到任何服务器上的所有文件(包括供应商目录)?

  • 问题内容: 在Spring 3.0中,我可以有一个可选的path变量吗? 例如 在这里我想还是要调用相同的方法。 一种明显的解决方法是声明为请求参数: 然后/json?type=abc&track=aa或/json?track=rr将工作 问题答案: 你不能具有可选的路径变量,但是可以有两个调用相同服务代码的控制器方法: