在 Selector for FlatList 中使用 Lodash 从 Redux Reducer 生成对象数组
Generate Array of Objects using Lodash from Redux Reducer in Selector for FlatList
如果您不知道 React 等,请阅读此处。以下是相同的问题,但与 React 等更相关:
我有多个包含一种数据的对象:
价格:
'btc-usd' : 2640, 'ltc-usd': 40, ...
加密数量:
'btc-usd': 2.533, 'ltc-usd': 10.42, ...
我如何获取这些对象并创建对象数组,例如:
[ { name: 'Bitcoin', amount: 2.533, value: 2640, id: 'btc-usd' },
{ name: 'Litecoin', amount: 10.42, value: 40, id: 'ltc-usd' }, ...
]
对于 React 程序员:
要在 React 中使用新的 FlatList 组件,您需要提供一个对象数组
<FlatList
data={[{key: 'a'}, {key: 'b'}]}
renderItem={({item}) => <Text>{item.key}</Text>}
/>
我使用多个 reducer 来存储不同种类的加密货币数据。
Reducer1 存储价格:
'btc-usd' : 2640,'ltc-usd': 40`
Reducer2 存储您拥有的加密货币数量:
'btc-usd': 2.533,'ltc-usd': 10.42
我的目标是遍历这些值并创建一个对象数组,例如
[ { name: 'Bitcoin', amount: 2.533, value: 2640, id: 'btc-usd' },
{ name: 'Litecoin', amount: 10.42, value: 40, id: 'ltc-usd' }, ...
]
到目前为止,我认为正确的方法是在选择器中重新选择。缺少的部分是 createSelector 中的 lodash 部分。
令人惊讶的是,我没有在互联网上找到任何结合 lodash 和 FlatList 的东西。
非常感谢您的帮助。
import { createSelector } from 'reselect';
import _ from 'lodash';
export const selectRate = (state) => state.rate;
export const selectCryptoBalance = (state) => state.cryptoBalance;
export const createCoinArray = createSelector(
selectRate, selectCryptoBalance,
(rate, cryptoBalance) => {
const coinArray = []; //better load array from state?
//IMPROVEMENT NEEDED HERE
_.forIn(selectRate, () => {
coinArray.push(_.assign({ [selectRate.id]: 0 }, cryptoBalance));
console.log('coinArray in loop ', coinArray);
});
return coinArray;
}
);
解决方案成功了!这里有更多解决方案
感谢您的帮助!很多 React 用户会很感激
假设您有以下对象
prices = {'btc-usd' : 2640,'ltc-usd': 40, ... }
rates = {'btc-usd': 2.533,'ltc-usd': 10.42, ...}
names = {'btc-usd': 'Bitcoin' ...}
你可以
_.map(prices,(value,id) => ({name:names[id], amount:rates[id], value,id}))
如果您不知道 React 等,请阅读此处。以下是相同的问题,但与 React 等更相关:
我有多个包含一种数据的对象: 价格:
'btc-usd' : 2640, 'ltc-usd': 40, ...
加密数量:
'btc-usd': 2.533, 'ltc-usd': 10.42, ...
我如何获取这些对象并创建对象数组,例如:
[ { name: 'Bitcoin', amount: 2.533, value: 2640, id: 'btc-usd' },
{ name: 'Litecoin', amount: 10.42, value: 40, id: 'ltc-usd' }, ...
]
对于 React 程序员:
要在 React 中使用新的 FlatList 组件,您需要提供一个对象数组
<FlatList
data={[{key: 'a'}, {key: 'b'}]}
renderItem={({item}) => <Text>{item.key}</Text>}
/>
我使用多个 reducer 来存储不同种类的加密货币数据。 Reducer1 存储价格:
'btc-usd' : 2640,'ltc-usd': 40`
Reducer2 存储您拥有的加密货币数量:
'btc-usd': 2.533,'ltc-usd': 10.42
我的目标是遍历这些值并创建一个对象数组,例如
[ { name: 'Bitcoin', amount: 2.533, value: 2640, id: 'btc-usd' },
{ name: 'Litecoin', amount: 10.42, value: 40, id: 'ltc-usd' }, ...
]
到目前为止,我认为正确的方法是在选择器中重新选择。缺少的部分是 createSelector 中的 lodash 部分。 令人惊讶的是,我没有在互联网上找到任何结合 lodash 和 FlatList 的东西。 非常感谢您的帮助。
import { createSelector } from 'reselect';
import _ from 'lodash';
export const selectRate = (state) => state.rate;
export const selectCryptoBalance = (state) => state.cryptoBalance;
export const createCoinArray = createSelector(
selectRate, selectCryptoBalance,
(rate, cryptoBalance) => {
const coinArray = []; //better load array from state?
//IMPROVEMENT NEEDED HERE
_.forIn(selectRate, () => {
coinArray.push(_.assign({ [selectRate.id]: 0 }, cryptoBalance));
console.log('coinArray in loop ', coinArray);
});
return coinArray;
}
);
解决方案成功了!这里有更多解决方案
假设您有以下对象
prices = {'btc-usd' : 2640,'ltc-usd': 40, ... }
rates = {'btc-usd': 2.533,'ltc-usd': 10.42, ...}
names = {'btc-usd': 'Bitcoin' ...}
你可以
_.map(prices,(value,id) => ({name:names[id], amount:rates[id], value,id}))