通过自定义键将序列转换为地图

Convert Seq to Map by custom key

本文关键字:转换 地图 自定义      更新时间:2023-09-26
如何将

以下JavaScript数组转换为由列表中每个对象的"id"键控的不可变映射?

    id: 'all',
    label: 'All',
    isSelected: false
  }, {
    id: '1',
    label: '1',
    isSelected: true
  }, {
    id: '2',
    label: '2',
    isSelected: false
  }, {
    id: '3',
    label: '3',
    isSelected: false
}]

我希望能够做到:

// {id: 'all', label: 'All', isSelected: true}

这可以使用不可变的JS完成,如下所示。

var buttons = [{
    id: 'all',
    label: 'All',
    isSelected: false
  }, {
    id: '1',
    label: '1',
    isSelected: true
  }, {
    id: '2',
    label: '2',
    isSelected: false
  }, {
    id: '3',
    label: '3',
    isSelected: false
}];
buttonImmutableList = Immutable.fromJS(buttons)
buttonImmutableMap = buttonImmutableList.reduce((a,c)=>  a.set(c.get('id'),c), Immutable.Map())

使用不可变:

var buttons = [{
    id: 'all',
    label: 'All',
    isSelected: false
  }, {
    id: '1',
    label: '1',
    isSelected: true
  }, {
    id: '2',
    label: '2',
    isSelected: false
  }, {
    id: '3',
    label: '3',
    isSelected: false
}];
var array = {};
for(var index in buttons) {
    var token = buttons[index];
    array[token.id] = token;
}
var map = new Immutable.Map(array);
var test = map.get('all');
window.alert(test.label);

如果以后要添加键 -> 值,则会修改映射,从而使当前实例失效。为此,您需要将变量map重新分配给最新返回的有效实例:

map = map.set(key, value);