在不可变对象中添加具有键值对的新对象

random_coder_101

这是我编写的关于不可变对象要执行的简单测试

it('adds a new map with loaded data where the key is the ticker symbol', () => {
        const state = Map();
        const tickers = List.of('AAPL', 'TSLA', 'GOOGL');
        const nextState = addTickerKeys(state, tickers);

        expect(nextState).to.equal(fromJS({
            tickers: ['AAPL', 'TSLA', 'GOOGL'], 
            data: {
                AAPL: {}, 
                TSLA: {}, 
                GOOGL: {}
            }
        }));
    })

如何将数据对象和具有空数据的相应键添加到状态对象中?

到目前为止,这是我尝试过的

export function addTickerKeys(state, tickers) {
    const newState = setTickers(state, tickers);
    const tickerList = newState.get('tickers');
    return tickerList.forEach((value, key, iter) => {
        return newState.setIn(['data', key]);
    })
}

我已经尝试根据文档(https://facebook.github.io/immutable-js/docs/#/Map)替换返回值newState.setIn(['data',key])的值,键和迭代器/ set

但是,每次我都会得到相同的回复,

AssertionError:预期3等于{Object(size,_root,...)}

有人可以告诉我怎么了吗?这似乎很简单,但是我似乎在与Immutable对象作斗争,而TypeScript中的文档却无济于事。

random_coder_101

这是我刚刚想出的快速答案。

不可变似乎没有强大的内置函数来完成此任务,而您必须从纯函数中返回状态的方式令人沮丧。

这是添加对象键值对的快速而肮脏的解决方案。

export function addTickerKeys(state) {
    const tickerArray = state.get('tickers');
    let newState = Map();
    for(let i = 0; i < tickerArray.size; i++){
        ctr++;
        newState = state.setIn(['data', tickerArray.get(i)], Map());
        state = state.concat(newState);
        if(i === tickerArray.size - 1){
            return state;
        }
    }
}

如果其他人仍然有不同的答案,那么也许可以分享一个更优雅的内置解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有可变字段的不可变对象

来自分类Dev

F#可以更新类中的不可变绑定(创建具有更改的指定绑定的新对象吗?)

来自分类Dev

F#可以更新类中的不可变绑定(创建具有更改的指定绑定的新对象吗?)

来自分类Dev

创建新对象以替换不可变对象中的值

来自分类Dev

具有父类的groovy不可变对象

来自分类Dev

rethinkdb中具有可变字段的对象

来自分类Dev

当对象具有变体时,是否有一种方法可以在Java中创建不可变对象?

来自分类Dev

将具有键值对的列表中的dict对象插入到新列表中

来自分类Dev

使对象在Groovy中不可变

来自分类Dev

在Ruby中从具有嵌套JSON键值对的类创建新的实例/对象

来自分类Dev

在Ruby中从具有嵌套JSON键值对的类创建新的实例/对象

来自分类Dev

在对象中添加具有键值的另一个属性

来自分类Dev

如何在JavaScript中向数组添加新对象(键值对)?

来自分类Dev

如何在JavaScript对象中添加新的键值对

来自分类Dev

“无法添加具有 ID 的对象,因为对象已存在”但对象在操场测试环境中不可见

来自分类Dev

Android中不可变对象的价格有多高?

来自分类Dev

在 Javascript 对象中添加键值对

来自分类Dev

具有嵌套对象和构建器的不可变值对象

来自分类Dev

在不可变对象Java中限制可变对象

来自分类Dev

将具有相同键值的数组中的JavaScript对象组合

来自分类Dev

从具有键值的字典数组中获取对象的索引

来自分类Dev

根据Typescript中的参数返回具有键值对的对象

来自分类Dev

在IE9中获取具有键值问题的对象

来自分类Dev

将具有相同键值的数组中的JavaScript对象组合

来自分类Dev

在Python中对不可变对象进行操作时,如何创建新对象?

来自分类Dev

如何根据f#中定义的类型的对象生成新的不可变对象?

来自分类Dev

在现有的对象数组中插入新的键值?

来自分类Dev

如何使对象在Java中不可变

来自分类Dev

如何更新不可变对象中的字段

Related 相关文章

  1. 1

    具有可变字段的不可变对象

  2. 2

    F#可以更新类中的不可变绑定(创建具有更改的指定绑定的新对象吗?)

  3. 3

    F#可以更新类中的不可变绑定(创建具有更改的指定绑定的新对象吗?)

  4. 4

    创建新对象以替换不可变对象中的值

  5. 5

    具有父类的groovy不可变对象

  6. 6

    rethinkdb中具有可变字段的对象

  7. 7

    当对象具有变体时,是否有一种方法可以在Java中创建不可变对象?

  8. 8

    将具有键值对的列表中的dict对象插入到新列表中

  9. 9

    使对象在Groovy中不可变

  10. 10

    在Ruby中从具有嵌套JSON键值对的类创建新的实例/对象

  11. 11

    在Ruby中从具有嵌套JSON键值对的类创建新的实例/对象

  12. 12

    在对象中添加具有键值的另一个属性

  13. 13

    如何在JavaScript中向数组添加新对象(键值对)?

  14. 14

    如何在JavaScript对象中添加新的键值对

  15. 15

    “无法添加具有 ID 的对象,因为对象已存在”但对象在操场测试环境中不可见

  16. 16

    Android中不可变对象的价格有多高?

  17. 17

    在 Javascript 对象中添加键值对

  18. 18

    具有嵌套对象和构建器的不可变值对象

  19. 19

    在不可变对象Java中限制可变对象

  20. 20

    将具有相同键值的数组中的JavaScript对象组合

  21. 21

    从具有键值的字典数组中获取对象的索引

  22. 22

    根据Typescript中的参数返回具有键值对的对象

  23. 23

    在IE9中获取具有键值问题的对象

  24. 24

    将具有相同键值的数组中的JavaScript对象组合

  25. 25

    在Python中对不可变对象进行操作时,如何创建新对象?

  26. 26

    如何根据f#中定义的类型的对象生成新的不可变对象?

  27. 27

    在现有的对象数组中插入新的键值?

  28. 28

    如何使对象在Java中不可变

  29. 29

    如何更新不可变对象中的字段

热门标签

归档