【问题标题】:How to use map / foreach with adjacent items?如何将 map / foreach 与相邻项目一起使用?
【发布时间】:2019-05-28 04:13:14
【问题描述】:

比较对象数组中的两个相似值有点麻烦。

例如,我有以下对象数组:

let Activities = [
  {
    "_id": "r6cDEGoW6v6WCWR2M",
    createdAt: ISODate("2018-12-29T21:43:49.723Z"),
    comment: 'my comment 1'
  },
  {
    "_id": "JaMSF88t8o5tMC8GM",
    createdAt: ISODate("2018-12-30T21:43:49.723Z"),
    comment: 'my comment 2'
  }
]

我想检查 Activity[0] 的 createdAt 日期是否比 Activity[1] 的日期短一天(确实如此),如果是的话,只需 console.log("Yesterday");

我一直在尝试使用 Map 和 Foreach,但不知道如何一次访问数组中的相邻项来比较它们,因为这些方法似乎都不需要索引参数来迭代。有道理吗?

【问题讨论】:

  • 是否保证只有是两个元素?
  • 预期的最终结果是什么?你在排序一个数组吗?您只是想比较数组中的 2 个元素吗?正如@Taplar 所问,是否只有两个元素?
  • 不,这可能是一个非常大的结果集。谢谢
  • 是的,它是 Mongo 集合
  • 好吧,正如 Drew 所问的,你想做什么?如果有活动 != 2 ,预期的行为是什么?

标签: javascript mongodb dictionary foreach


【解决方案1】:

forEach 可以带其他参数,包括索引和源数组。我不得不存根 ISODate 并进行原始字符串比较,但这应该会给你正确的想法。

const ISODate = date => date;

let activities = [
  {
    "_id": "r6cDEGoW6v6WCWR2M",
    createdAt: ISODate("2018-12-29T21:43:49.723Z"),
    comment: 'my comment 1'
  },
  {
    "_id": "JaMSF88t8o5tMC8GM",
    createdAt: ISODate("2018-12-30T21:43:49.723Z"),
    comment: 'my comment 2'
  }
];

activities.forEach((activity, index, src) => {
  if (index < src.length - 1) {
    const nextActivity = src[index + 1];
    if (activity.createdAt < nextActivity.createdAt) {
      console.log('yesterday');
    }
  }
});

如果这是为了反应,那么最好通过array::map 函数运行您的数组。类似于:

activities.map((activity, index, src) => {
  let dateChange;
  if (index < src.length - 1) {
    const nextActivity = src[index + 1];
    dateChange = activity.createdAt < nextActivity.createdAt;
  }
  return (
    <Fragment key={ `${activity.createdAt}-${index}` }>
      <Activity { ...activity }/>
      { dateChange && <Divider />}
    </Fragment>
  );
});

【讨论】:

  • 这太好了,谢谢。如何将其标记为答案?
  • 我的答案旁边应该有一个空的复选标记,点击它。
  • 谢谢,那张支票有点微妙——我永远不会找到它。出于好奇,这是否也可以用 Map 来完成?它适用于 React,我实际上是在用 React 编写我的第一个 Meteor 应用程序。此刻,Reduce 似乎有点过头了 :)
  • 是的,map其实有相同的签名,你只需要返回一个新的mapped to value,这种情况下react可以渲染。
  • 太好了。我也试试地图。再次感谢
猜你喜欢
  • 2016-12-20
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
  • 2016-04-02
  • 2011-06-03
  • 1970-01-01
相关资源
最近更新 更多