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

时间:2018-01-02 19:32:05

标签: 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();

但是,如果我要吸引孩子,那将不再是一个不可改变的名单。

使用get()

const first = example.get('first');
const last = example.get('last');
...

这可以保持孩子的类型,但似乎是额外的周期和击键。

有什么想法吗?

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

1 个答案:

答案 0 :(得分:1)

就我个人而言,我可能会坚持使用.get(),但如果您希望能够使用destructruing,则可以尝试使用.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>
&#13;
&#13;
&#13;

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