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

Ecmascript 6 从不可变映射中获取多个键的最佳方法?,ecmascript-6,immutable.js,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(); 但是,如

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

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();
但是,如果我把孩子们拉进来,这将不再是一份一成不变的清单

使用
get()

这保持了儿童的类型,但似乎是额外的循环和按键

有什么想法吗


我知道这可能是一个固执己见的问题,但我正在寻找一些有价值的东西,请包括统计数据(按键、周期)来支持你的答案。

就我个人而言,我可能会坚持使用
.get()
s,但如果你想使用destructring,你可以尝试这种方法。它类似于
.toJS()
,但它只对对象或数组进行浅层转换。如果您知道要将其转换为什么类型,也可以使用或(如果要对其进行分解,则必须使用)

const m=Immutable.fromJS({
a:{a2:'a3'},
b:[1,2,{f:'f'}],
});
const{a,b}=m.toJSON();
assert(Immutable.isImmutable(a)和&Immutable.isImmutable(b));
log('a=',a);
console.log('b=',b)
常数[c,d,e]=b.toArray();
assert(c==1&&d==2&&Immutable.isImmutable(e));
常量{f}=e.toObject();
断言(f=='f')

酷,你有没有检查过.toJS vs.toJSON vs.get的性能?我没有把
toJS()
放在测试中,因为它没有真正做到你想要的。我很确定它会慢很多,因为它必须转换整个嵌套结构,而不仅仅是第一层
toJSON
将具有与
toObject
toArray
相同的性能,因为它实际上只是一个别名。
const first = example.get('first');
const last = example.get('last');
...