在moment js中从数组中删除重复项

giv*_*Job 2 javascript momentjs

我有

let  array = [moment('2019-01-17'),moment('2019-01-19'),moment('2019-01-19'),moment('2019-01-21')];
Run Code Online (Sandbox Code Playgroud)

我需要删除重复项

所以我写了过滤器,但它无法正常工作

array= array.filter((v,i) => !moment(array.indexOf(v)).isSame(moment(i)))
Run Code Online (Sandbox Code Playgroud)

在index.html 中运行实时plunker代码

Sam*_*ult 5

你的方向是正确的,但细节有点偏差。请尝试这个:

const comparisonValues = array.map(v => v.valueOf());
array = array.filter((v,i) => comparisonValues.indexOf(v.valueOf()) == i);
Run Code Online (Sandbox Code Playgroud)

解释:

  • array.filter((value, index, self) => self.indexOf(value) == index)是在数组中查找唯一值的有用模式
  • 该模式背后的直觉是“仅选取数组中值的第一个实例”
  • 它仅适用于可以直接比较的值 - indexOf 在内部使用严格的相等检查 ( ===)
  • momentValue.valueOf()将为该比较返回一个有用的值,即自 Unix Epoch 以来的毫秒数
  • 我们的解决方案使用一个辅助数组,其中包含来自valueOf和 in 的毫秒值,使用迭代中的当前值filter进行比较valueOf()

另一种方式,如果你想使用isSame,可能是这样的:

array = array.filter((v, i) => {
  return array.findIndex(candidate => v.isSame(candidate)) == i
});
Run Code Online (Sandbox Code Playgroud)