这是我编写的关于不可变对象要执行的简单测试
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中的文档却无济于事。
这是我刚刚想出的快速答案。
不可变似乎没有强大的内置函数来完成此任务,而您必须从纯函数中返回状态的方式令人沮丧。
这是添加对象键值对的快速而肮脏的解决方案。
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] 删除。
我来说两句