Сгенерируйте массив объектов, используя Lodash из Redux Reducer в селекторе для 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-программистов:

Чтобы использовать новый компонент FlatList в React, вам необходимо предоставить массив объектов.

<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' }, ...
]

До сих пор я думаю, что правильный способ - сделать это в селекторе с повторным выбором. Отсутствующая часть — это часть lodash в createSelector. Удивительно, но я не нашел в Интернете ничего, объединяющего 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 оценят


person Marcel Blockchain    schedule 26.06.2017    source источник


Ответы (1)


Предполагая, что у вас есть следующие объекты

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})) 
person Shivam    schedule 27.06.2017