Javascript 从即时js中的数组中删除重复项

Javascript 从即时js中的数组中删除重复项,javascript,momentjs,Javascript,Momentjs,我有 我需要删除重复项 所以我写了过滤器,但它不能正常工作 let array = [moment('2019-01-17'),moment('2019-01-19'),moment('2019-01-19'),moment('2019-01-21')]; 在index.html中使用实时代码时,您的思路是正确的,但细节有点偏离。请试试这个: array= array.filter((v,i) => !moment(array.indexOf(v)).isSame(moment(i))

我有

我需要删除重复项

所以我写了过滤器,但它不能正常工作

let  array = [moment('2019-01-17'),moment('2019-01-19'),moment('2019-01-19'),moment('2019-01-21')];

在index.html中使用实时代码时,您的思路是正确的,但细节有点偏离。请试试这个:

array= array.filter((v,i) => !moment(array.indexOf(v)).isSame(moment(i)))
说明:

array.filtervalue,index,self=>self.indexOfvalue==index是查找数组中唯一值的有用模式 模式背后的直觉是只拾取数组中值的第一个实例 它只适用于可以直接比较的值-indexOf在内部使用严格的相等性检查=== momentValue.valueOf将返回一个有用的比较值,即自Unix纪元以来的毫秒数 我们的解决方案使用一个助手数组,该数组由valueOf和in filter中的毫秒值组成,在迭代中使用当前值的valueOf进行比较 另一种方法,如果您想使用isSame,可以如下所示:

const comparisonValues = array.map(v => v.valueOf());
array = array.filter((v,i) => comparisonValues.indexOf(v.valueOf()) == i);

你的思路是对的,但细节有点不清楚。请试试这个:

array= array.filter((v,i) => !moment(array.indexOf(v)).isSame(moment(i)))
说明:

array.filtervalue,index,self=>self.indexOfvalue==index是查找数组中唯一值的有用模式 模式背后的直觉是只拾取数组中值的第一个实例 它只适用于可以直接比较的值-indexOf在内部使用严格的相等性检查=== momentValue.valueOf将返回一个有用的比较值,即自Unix纪元以来的毫秒数 我们的解决方案使用一个助手数组,该数组由valueOf和in filter中的毫秒值组成,在迭代中使用当前值的valueOf进行比较 另一种方法,如果您想使用isSame,可以如下所示:

const comparisonValues = array.map(v => v.valueOf());
array = array.filter((v,i) => comparisonValues.indexOf(v.valueOf()) == i);

您只需一次就可以实现相同的结果,而且速度更快。一旦您将项目分组,只需通过。这将比每次搜索整个数组的每个项目都要快。对于小型阵列来说,这并不重要,但对于大型阵列来说,这将非常明显

以下是简明版本:

假设数据=[时刻'2019-01-17',时刻'2019-01-19',时刻'2019-01-19',时刻'2019-01-19',时刻'2019-01-19',时刻'2019-01-21']; const result=data.reducea,c=>a[c.format]=c,a,{} console.logObject.valuesresult
您只需一次就可以实现相同的结果,而且速度更快。一旦您将项目分组,只需通过。这将比每次搜索整个数组的每个项目都要快。对于小型阵列来说,这并不重要,但对于大型阵列来说,这将非常明显

以下是简明版本:

假设数据=[时刻'2019-01-17',时刻'2019-01-19',时刻'2019-01-19',时刻'2019-01-19',时刻'2019-01-19',时刻'2019-01-21']; const result=data.reducea,c=>a[c.format]=c,a,{} console.logObject.valuesresult
你能在回答中使用IsSamemometer函数吗?你能在回答中使用IsSamemometer函数吗?为什么你的代码显示输出错误?比如[2019-01-16T18:30:00.000Z,2019-01-18T18:30:00.000Z,2019-01-20T18:30:00.000Z]它怎么了?这只是力矩对象的字符串表示。为什么代码显示输出错误?比如[2019-01-16T18:30:00.000Z,2019-01-18T18:30:00.000Z,2019-01-20T18:30:00.000Z]它怎么了?它只是力矩对象的字符串表示。