gpt4 book ai didi

javascript - 如何比较此循环中的日期值以查找重复项

转载 作者:行者123 更新时间:2023-12-02 23:08:07 25 4
gpt4 key购买 nike

我有一个函数可以检查重复项并使用指定列中的值删除它们。如果我使用除带有日期的 A 列之外的任何其他列,它可以正常工作,但如果我使用 A 列,它就不起作用。

enter image description here

我知道代码并不是仅仅指日期值,我已经尝试过 getTime() 和其他建议,但我没有得到所需的结果。下面是我的代码

function removeDuplicates() { 

var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
var newData = [];
for (var i in data) {
var row = data[i];
var duplicate = false;
for (var j in newData) {
if (row[0] == newData[j][0]) {
duplicate = true;
}
}
if (!duplicate) {
newData.push(row);
}
}
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

我很高兴获得帮助,使此代码根据 A 列中找到的重复项删除重复行

最佳答案

它不起作用,因为(我假设 row[0] 是一个 date 对象)完全相同日期的两个日期实例解析为 false 如下所示:

const a = new Date();
const b = new Date(a.getTime());

console.log(a,b);
console.log(a === b);

您应该做的是比较时间戳:

const a = new Date();
const b = new Date(a.getTime());

console.log(a,b);
console.log(a.getTime() === b.getTime());

因此您需要做的更改如下:

if (row[0].getTime() == newData[j][0].getTime()) {
duplicate = true;
}

您还可以使用以下内容简化循环(没有箭头函数,只需替换为普通函数):

function removeDuplicates() { 

const sheet = SpreadsheetApp.getActiveSheet();
const data = sheet.getDataRange().getValues();
const newData = data.reduce(function(a,row){
const [currentDate] = row;
const duplicate = a.every(function([[date]]){
return date.getTime() !== currentDate.getTime());
});
if(!duplicate){
a.push(row);
}
return a;
}, []);
sheet.clearContents();
sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
}

关于javascript - 如何比较此循环中的日期值以查找重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57495761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com