修改日期数组

时间:2018-04-09 14:49:51

标签: javascript arrays

我Javascript我有一个日期数组,例如:

["2018-04-25", 
"2018-04-25", 
"2018-04-26", 
"2018-04-27", 
"2018-04-28", 
"2018-04-28"]

如何识别重复日期并将其更改为false,以使值变为:

["2018-04-25", 
false, 
"2018-04-26", 
"2018-04-27", 
"2018-04-28", 
false]

这就是它所需要的。

由于

2 个答案:

答案 0 :(得分:2)

使用已排序的数组,您可以检查前一个并返回false,如果相同,则返回其他值。



var array = ["2018-04-25", "2018-04-25", "2018-04-26", "2018-04-27", "2018-04-28", "2018-04-28"];

array = array.map((v, i, a) => a[i - 1] !== v && v);
    
console.log(array);




对于未排序的数组并且尊重第一个相同的日期,如评论中的Kevin Hoerr所述,请indexOf并检查实际索引。



var array = ["2018-04-25", "2018-04-25", "2018-04-26", "2018-04-27", "2018-04-28", "2018-04-28"];

array = array.map((v, i, a) => a.indexOf(v) === i && v);
    
console.log(array);




如果您有完整的ISO日期,则可以只使用没有时间的日期。这种方法需要排序数据。



var array = ['2018-04-14T13:00:00+02:00', '2018-04-15T08:45:00+02:00', '2018-04-15T10:00:00+02:00', '2018-04-22T08:45:00+02:00', '2018-04-22T10:00:00+02:00', '2018-04-29T08:45:00+02:00', '2018-04-29T10:00:00+02:00'];

array = array.map((v, i, a) => (a[i - 1] || '').slice(0, 10) !== v.slice(0, 10) && v);
    
console.log(array);




答案 1 :(得分:0)

forEach似乎比地图更容易阅读并减少我在这里看到



var data = ["2018-04-25","2018-04-25","2018-04-26","2018-04-27","2018-04-28","2018-04-28"];
var newArr = [];
data.forEach(function(x) {
  newArr.push(newArr.includes(x) ? false : x)
});
console.log(newArr)