Реагируйте Native итерируйте по объектам массива и накапливайте итоговое значение - PullRequest
0 голосов
/ 15 декабря 2018

Я пишу часть функции в своем приложении React Native, я вызвал API, и он превращает меня в этот массив JSON с объектами, и хранится в this.props.data:

           [{name:'Jhon', income:28, spending:20},
            {name:'Anna', income:82, spending:50},
            {name:'Peter', income:141, spending:70}
           ]

Я хочувыполнить итерацию по этому объекту массива и суммировать доход и стоимость расходов, в конечном итоге создать новый объект (каждый) и присоединить его к исходному this.props.data и сделать что-то похожее на приведенное ниже:

           [{name:'Jhon', income:28, spending:20},
            {name:'Anna', income:82, spending:50},
            {name:'Peter', income:141, spending:70},
            {name:'Everyone', income:251, spending:140}
           ]

Мой текущийпопытка ниже, но на самом деле не работает, пожалуйста, посоветуйте пример кода, спасибо

const CustomListview = ({ itemList }) => (
    var everyoneObject = {
      name: 'everyone',
      income: 0,
      spending: 0
    }

    itemList.map(({name, income, spending}) => { 
        everyoneObject = {
          name: 'everyone',
          income: income++,
          spending: spending++
        }
    })

    itemList.push(everyoneObject);

    <View style={styles.container}>
        <FlatList
            data={itemList}
            renderItem={({ item }) =>
              <TillReportRow
                  name={item.name}
                  income={item.income}
                  spending={item.spending}
              />}
            keyExtractor={(item, index) => index.toString()}
        />
    </View>
);

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

вы почти подошли к правильной логике,

это может быть один из способов достижения этого,

 let everyOneObj = { name:'Everyone', income: 0, spending: 0 };

 itemList.forEach((item) => { `
      everyOneObj.income += item.income;
      everyOneObj.spending += item.spending;
 });

 itemList.push(everyOneObj);
0 голосов
/ 15 декабря 2018

Вам нужно использовать reduce для создания одного нового объекта, а не map

const itemList = [
  { name: "Jhon", income: 28, spending: 20 },
  { name: "Anna", income: 82, spending: 50 },
  { name: "Peter", income: 141, spending: 70 }
];

const everyone = itemList.reduce(
  (acc, { income, spending }) => {
    acc.income += income;
    acc.spending += spending;
    return acc;
  },
  { name: "everyone", income: 0, spending: 0 }
);

itemList.push(everyone);
console.log(itemList);

, который печатает

[
  { name: "Jhon", income: 28, spending: 20 },
  { name: "Anna", income: 82, spending: 50 },
  { name: "Peter", income: 141, spending: 70 },
  { name: "everyone", income: 251, spending: 140 }
]
...