代码之家  ›  专栏  ›  技术社区  ›  sefirosu

React Native遍历数组对象并计算求和值

  •  0
  • sefirosu  · 技术社区  · 7 年前

    我正在我的React原生应用程序中编写一个函数,我调用了一个api,它将我的json数组转换为对象,并存储在 this.props.data :

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

    我希望遍历这个数组对象,并将收入和支出值相加,最终生成一个新对象(everyone)并与原始对象匹配 这是道具数据

               [{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 回复  |  直到 7 年前
        1
  •  1
  •   senthil balaji    7 年前

    你几乎已经接近正确的逻辑,

     let everyOneObj = { name:'Everyone', income: 0, spending: 0 };
    
     itemList.forEach((item) => { `
          everyOneObj.income += item.income;
          everyOneObj.spending += item.spending;
     });
    
     itemList.push(everyOneObj);
    
        2
  •  0
  •   Eugene    7 年前

    你需要使用 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 }
    ]