ecmascript-6 - 从不可变映射中获取多个键的最佳方法?

标签 ecmascript-6 immutable.js

从不可变映射中获取多个值的最佳方法是什么?

const example = new Map({
    id: 1,
    first: 'John',
    last: 'Smith',
    age: '99',
    gender: 'M',
    children: new List([7,8,10]),
});

使用 toJS()一直是一种方法:
const {
    first,
    last,
    age,
    gender
} = example.toJS();

但如果我把 children 拉进来,它就不再是一个一成不变的 list 。

使用 get() :
const first = example.get('first');
const last = example.get('last');
...

这保持了 child 的类型,但似乎是额外的循环和击键。

有什么想法吗?

我知道这可能是一个固执己见的问题,但我正在寻找有值(value)的东西,请包括统计数据(击键次数、循环次数)以支持您的答案。

最佳答案

我个人可能会坚持使用 .get() s,但如果你想能够使用解构,你可以试试 .toJSON() 方法。就像 .toJS()但它只对对象或数组进行浅层转换。您也可以使用 .toObject() .toArray() 如果你知道你想把它变成什么类型​​(如果你正在解构它,你必须这样做)。

const m = Immutable.fromJS({
  a: {a2: 'a3'},
  b: [1, 2, {f: 'f'}],
});

const { a, b } = m.toJSON();
console.assert(Immutable.isImmutable(a) && Immutable.isImmutable(b));
console.log('a =', a);
console.log('b =', b)
const [ c, d, e ] = b.toArray();
console.assert(c == 1 && d == 2 && Immutable.isImmutable(e));
const { f } = e.toObject();
console.assert(f === 'f'); 
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/4.0.0-rc.9/immutable.js"></script>


我做了一个 jsperf因为你提到你想要统计数据。对于我在 MacBook Pro 上使用 Chrome 63,.get大约是 .toJSON 的 3 倍

关于ecmascript-6 - 从不可变映射中获取多个键的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48066741/

相关文章:

javascript - 如何轻松地从对象中获取非 getter 属性

javascript - 如何使用 npm 在 ES6 中导入 moment.js?

javascript - 为什么 'debugger' 会阻止事件(keydown -> onInput)被触发

javascript - JS 对象属性继承

javascript - 我是否必须忽略 Immutable JS 的全局模块状态的概念?

javascript - 从 set In 返回一个映射 - Immutable JS

javascript - ES6 - 使用 getter 导出模块

typescript - 如何使用 Typescript 正确地将 Immutable Map 转换为严格类型

javascript - 如何让这段代码看起来更好

javascript - Netflix Falcor 与 Immutable.js 一起工作?