如何映射 javascript 数组的 i 和 i+1 值?

Posted

技术标签:

【中文标题】如何映射 javascript 数组的 i 和 i+1 值?【英文标题】:How to map i and i+1 values of a javascript array? 【发布时间】:2019-11-24 00:14:45 【问题描述】:

我想使用地图在 javascript 地图中显示第 i 个值和第 i+1 个值,以在轮播中显示一组两张卡片。

以下是我正在使用的代码,我想对其进行修改以获得所需的结果:

testimonialContent.map((testimonial, i) => 
  return (
    <Carousel.Item className=classes.carousel_item>
      <div className=classes.root>
        <div className=classes.testimonial_card>
          testimonial[i]
        </div>
        /* Second card */
        <div className=classes.second_card>
          testimonial[i+1]
        </div>
      </div>
    </Carousel.Item>

感谢任何帮助或建议。谢谢。

【问题讨论】:

您的代码块有未闭合的括号和大括号。 【参考方案1】:

您可以使用reduce() 合并数据。

注意: (index % 2 === 0) 是您指定 nth 孩子的地方(例如:2 在这种情况下

稍后在您的 render 方法中使用 destructuring in map()

const sampleData = ['first', 'second', 'third', 'fourth', 'fifth']

class App extends React.Component 
  render() 
    console.log("rendered");
    
    const edited = [].concat(sampleData).reduce((unique, value, index) => 
      if (index % 2 === 0) 
        return [...unique, [value]];
      
      unique[unique.length - 1].push(value);
      return unique;
    , [])
    
    return (
      <div>
        edited.map(([item1, item2]) => 
          <div className='block'>
            item1 && <div className='odd'>item1</div>
            item2 && <div className='even'>item2</div>
          </div>
        )
      </div>
    );
  


// Render it
ReactDOM.render(
  <App />,
  document.getElementById("react")
);
.block 
  border: 1px solid gray;


.odd 
  color: red;


.even 
  color: blue;
<div id="react"></div>
<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>

【讨论】:

我想同时显示第 i 个和第 i+1 个值。这个显示一次只有一个项目。我希望同时显示两个元素。 @anup 我更新了。这是你要找的吗?【参考方案2】:

使用整个数组而不是当前迭代

地图的每次迭代中的证言都是一个对象。而testimonialContent 是整个数组。

testimonialContent.map((testimonial, i) => 
  return (
    <Carousel.Item className=classes.carousel_item>
      <div className=classes.root>
        <div className=classes.testimonial_card>
          testimonial[i]
        </div>
        /* Second card */
        <div className=classes.second_card>
          testimonialContent[i+1] // this is the line to change
        </div>
      </div>
    </Carousel.Item>

但是这里感觉有些不对劲。我想你可能有一个x y problem

为什么要将下一个迭代用作当前迭代?最后一项将失败,因为它不存在,并且永远不会显示第一个 testimonialContent 的值,因为您总是从索引 1 开始。

我会重新考虑您在这里所做的事情,也许会采取另一种方法。

【讨论】:

不应该testimonial[i] 只是testimonial @Kobe 作者要求从他的代码中获得下一个推荐,它是使用正确数组的精确副本 我说的是第一次提到推荐? tesitmonial[i] 将未定义。【参考方案3】:

testimonial 不是数组,而是该数组中的当前迭代项。对于“下一个”项目,您可以使用数组testimonialContent

从评论中我了解到您希望实际生成 n/2 行,以便每个项目只出现一次。在这种情况下,使用普通的.map() 并不好,因为它会生成尽可能多的行,而您只需要一半的行数。相反,您可以使用Array.from 生成一个行数为一半(向上舍入)的数组,并使用该方法的回调参数。

Array.from(length: (testimonialContent.length+1)>>1, (_, i) => 
  return (
    <Carousel.Item className=classes.carousel_item>
      <div className=classes.root>
        <div className=classes.testimonial_card>
          testimonialContent[i*2]
        </div>
        /* Second card */
        <div className=classes.second_card>
          testimonialContent[i*2+1] || ""
        </div>
      </div>
    </Carousel.Item>
  )
)

【讨论】:

我喜欢你的解决方案,它有效,但有一个问题,我在一个轮播项目中得到 A 和 B,在另一个轮播项目中得到 B 和 C。我希望它在一个轮播项目中是 A 和 B,在另一个轮播项目中是 C 和 D,依此类推。感谢您的解决方案。 最好将此信息添加到您的问题中。我相应地更新了我的答案。【参考方案4】:

请参阅您的第一个 div 中的 testimonial 实例以及您的第二个 div 中 testimonialContent 数组中第 i 个 +1 位置上的元素。

testimonialContent.map((testimonial, i) => 
  return (
    <Carousel.Item className=classes.carousel_item>
      <div className=classes.root>
        <div className=classes.testimonial_card>
          testimonial
        </div>
        /* Second card */
        <div className=classes.second_card>
          testimonialContent[i+1]
        </div>
      </div>
    </Carousel.Item>

【讨论】:

以上是关于如何映射 javascript 数组的 i 和 i+1 值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JavaScript 中获取数组循环的前一个和下一个元素?

如何使用匹配重新排列 JavaScript 数组?

JavaScript 如何定义一个二维数组

javascript中数组取值的问题,如何取出键值对中的值?

如何在JavaScript数组中选择最后一个元素

javascript如何得到多个div中的所有a元素