【发布时间】:2019-01-19 16:31:32
【问题描述】:
我目前正在努力使用 redux 减速器。
//backend response
const response = {
data: {
results: {
222: {
items: ['id1', 'id3']
},
333: {
items: ['id2', 'id4', 'id999 (UNKNOWN)']
}
}
}
};
//currently saved in redux state
const stateItems = [
{
id: 'id1',
name: 'item ONE'
}, {
id: 'id2',
name: 'item TWO'
}, {
id: 'id3',
name: 'item THREE'
}, {
id: 'id4',
name: 'item FOUR'
}, {
id: 'id5',
name: 'item FIVE (UNUSED)'
}, {
id: 'id6',
name: 'item SIX (UNUSED)'
}
];
//converting items: ['ids'] => items: [{id: 'id', name: 'itemName'}]
const result = Object.values(response.data.results).map((keys, index, array) => {
keys.items = keys.items.map(itemId => {
return stateItems[stateItems.findIndex(x => x.id === itemId)];
});
return response.data.results;
});
//final result should be:
const expectedFinalResult = {
222: {items: [{id: 'id1', name: 'item ONE'}, {id: 'id3', name: 'item THREE'}]},
333: {items: [{id: 'id2', name: 'item TWO'}, {id: 'id4', name: 'item FOUR'}]}
};
//both should be equal:
console.log(JSON.stringify(expectedFinalResult));
console.log(JSON.stringify(result));
console.log('same result: ' + JSON.stringify(result) === JSON.stringify(expectedFinalResult));
我没有想法,如何实现它。 UNUSED 和 UNKNOWN 也应该被过滤掉。所以这个例子中的最终结果就像const expectedFinalResult一样。目前const result返回一个错误的结果。
希望有人有更好的想法或更好的方法。
谢谢
【问题讨论】:
-
请使用 Stack Snippets 来获取可运行的示例,而不是使用场外资源。使用
[<>]工具栏按钮打开片段编辑器; here's how to do one。由于您在问题中包含了所有相关代码(很好!)我已经为您将其复制到一个 sn-p 中。 -
注意:
JSON.stringify(result) === JSON.stringify(expectedFinalResult)是不是比较两个对象图的可靠方法。例如,JSON.stringify({a: 1, b: 2}) === JSON.stringify({b: 2, a: 1})是false(根据规范)。 -
在这个问题上展示你的努力做得很好!
标签: javascript node.js reactjs redux