我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]
这就是它所需要的。
由于
答案 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)