使用Lodash从选择器中的Redux Reducer为FlatList生成对象数组

时间:2017-06-26 17:17:58

标签: reactjs redux lodash reselect react-native-flatlist

如果您不了解React等,请阅读此处。以下是相同的问题,但与React等有关:

我有包含一种数据的severel对象: 价格:

'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>}
/>

我使用了几个存储不同种类加密货币数据的减速器。 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;
  }
);

解决方案有效!更多解决方案Generate Array of Objects of different Objects Javascript 谢谢你的帮助!很多React用户都会欣赏

1 个答案:

答案 0 :(得分:0)

假设您有以下对象

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