javascript - 在不可变对象(immutable对象)中添加具有键值对的新对象

标签 javascript immutable.js

这是我写的一个简单测试,说明我想用不可变对象(immutable对象)做什么

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/set ) 替换值、键和迭代器来代替 return newState.setIn(['data', key])

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

AssertionError: expected 3 to equal { Object (size, _root, ...) }

有人可以向我解释发生了什么问题吗?这似乎是一项足够简单的任务,但我似乎在与不可变对象(immutable对象)作斗争,TypeScript 中的文档也无济于事。

最佳答案

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

Immutable 似乎没有用于此任务的强大内置函数,而且您必须从纯函数返回状态的方式令人沮丧。

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

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;
        }
    }
}

如果其他人仍然有不同的答案,可能会分享更优雅的内置解决方案。

关于javascript - 在不可变对象(immutable对象)中添加具有键值对的新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40846782/

相关文章:

javascript - 为什么对这个字符串进行切片并使其成为数组会向数组的元素添加 undefined ?

javascript - 使用不可变数据结构时 Jest 模拟函数参数不匹配

javascript - 为什么我应该使用 immutablejs 而不是 object.freeze?

reactjs - React-router-redux 和 redux-immutable : You cannot change <Router history>; it will be ignored

javascript - Redux 的问题 - 从状态添加和删除项目

javascript - 如何设置连接多方上传文件的名称?

javascript - 重定向并滚动到特定内容

javascript - MongoDB-通过将集合与对象数组进行比较来返回现有字段的数组

javascript - 从html5拍照

javascript - 注释中带有 JSDoc 和 Immutable.js 数据结构