reactjs 如何破解.map函数

ewm0tg9j  于 2023-04-20  发布在  React
关注(0)|答案(4)|浏览(116)

如何打破一个.map函数?下面附上代码示例。我想打破外观一旦索引达到5,因为我只想渲染5头像到屏幕上。

<View style={{ flexDirection: 'row', marginTop: 20, marginLeft: 30  }}>
    {
      peopleGroup.map((people, i) => {
        if(i<5) {
          return (
            <Avatar
              key={people.id}
              width={30}
              position='absolute'
              containerStyle={{ transform: [{translate: [-28 + (28 * i), 0, 1 - (i * 0.1)]}] }}
              small
              rounded
              source={{uri: people.image}}
              activeOpacity={0.7}
              />
          )
        }else if(i===5) {
          return (
          <View key={i} style={{ transform: [{translate: [(25 * i), 9, 0]}]  }}>
            <Text>{peopleGroup.length}</Text>
          </View>
          )
        }
      }
      )
    }
</View>
y3bcpkx1

y3bcpkx11#

在Map之前使用Array.slice

peopleGroup
.slice(0, 5) // creates a copy of original, 5 items long
.map(...) // subsequent operations work on the copy

Tada!

rnmwe5a2

rnmwe5a22#

如何破解一个.map函数?
不可能,我们不能破坏#array.map,它将为数组的每个元素运行。
为了解决这个问题,你可以先使用slice,然后使用map,slice数组的前5个元素,然后在上面运行map。
就像这样:

peopleGroup.slice(0,5).map((people, i) => {
    return (...)
}
gcuhipw9

gcuhipw93#

而不是使用.slice.map,这将创建另一个循环。
您可以使用.reduce,这样您就可以用一个循环来执行逻辑(性能更好)。
不同之处在于.map必须返回相同长度的数组,而.reduce实际上可以返回任何内容。

data.reduce((result, current, i) => {
    if (i < 5) {
      result.push(<div>{current}</div>);
    }
    return result;
  }, [])

运行示例:

const data = [1, 2, 3, 4, 5, 6, 7];

const App = () => (
  <div>
    {data.reduce((result, current, i) => {
      if (i < 5) {
        result.push(<div>{current}</div>);
      }
      return result;
    }, [])}
  </div>
);

ReactDOM.render(<App />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
zfciruhq

zfciruhq4#

throw new Error(e);

将其添加到try catch中以防止崩溃。

相关问题