如何打破 .map 功能

IT技术 reactjs react-native
2021-05-19 09:27:18

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

<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>
4个回答

Array.slice在映射之前使用

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

多田!

如何破坏 .map 函数?

不可能,我们不能破坏#array.map,它将为数组的每个元素运行。

要解决您的问题,您可以先使用切片然后映射,切片数组的前 5 个元素,然后在其上运行映射。

像这样:

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

而不是使用.sliceand.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>

抛出新的错误(e);将其添加到 try catch 中以防止崩溃。