javascript - 日期功能合二为一
问题描述
我正在为基于语音的应用程序进行日期提取。我想知道如何在一个函数中检查日期并添加标志,例如用户要求更高的日期然后今天。现在我正在使用类似的功能来做到这一点,但如果有人能指导我做到这一点,那就太好了。我的代码如下,
checkedDateFlag,checkedDate 我怎样才能把这个功能合二为一,这样我就可以得到正确的日期并得到标志(真)
代码
let ent = [{
entity: 'sys-number',
location: [23, 25],
value: '12',
confidence: 1,
metadata: {
numeric_value: 1
}
},
{
entity: 'sys-date',
location: [23, 40],
value: '2017-02-16',
confidence: 1,
metadata: {
calendar_type: 'GREGORIAN',
timezone: 'GMT'
}
},
{
entity: 'sys-number',
location: [36, 40],
value: '2018',
confidence: 1,
metadata: {
numeric_value: 2018
}
},
{
entity: 'sys-date',
location: [49, 52],
value: '2030-12-17',
confidence: 1,
metadata: {
calendar_type: 'GREGORIAN',
timezone: 'GMT'
}
}
];
const dateChecker = (filteredDates, currentDate) => {
// This function checking date higher than todays date and replace higher date with current date.
return filteredDates.map(f => {
let fd = new Date(f);
if(fd > currentDate) {
return currentDate;
} else {
return fd;
}
})
}
const dateCheckerFlag = (filteredDates, currentDate) => {
// This function return true if date is higher and I can check it later and create response saying you have provided higher date than today. I can only issue statement till today and then issue the statement
for (let f of filteredDates) {
let fd = new Date(f);
if(fd > currentDate) {
return true
} else {
return false;
}
}
let filteredDates = ent.filter(f => {
if (f.entity === 'sys-date') {
return f.value
}
}).map(f => f.value);
let checkedDateFlag = helper.dateCheckerFlag(filteredDates, currentDate);
let checkedDate = helper.dateChecker(filteredDates, currentDate);
解决方案
我建议不要将这两个功能结合起来。尽管它们似乎做同样的事情,但它们具有完全不同的输出签名(布尔值与数组)。
如果你认为他们有很多重复的代码。也许以下可以是一种方法。我将离开组合和单独的功能。但强烈推荐单独的一个。
var ent = [{
entity: 'sys-number',
location: [23, 25],
value: '12',
confidence: 1,
metadata: {
numeric_value: 1
}
},
{
entity: 'sys-date',
location: [23, 40],
value: '2017-02-16',
confidence: 1,
metadata: {
calendar_type: 'GREGORIAN',
timezone: 'GMT'
}
},
{
entity: 'sys-number',
location: [36, 40],
value: '2018',
confidence: 1,
metadata: {
numeric_value: 2018
}
},
{
entity: 'sys-date',
location: [49, 52],
value: '2030-12-17',
confidence: 1,
metadata: {
calendar_type: 'GREGORIAN',
timezone: 'GMT'
}
}
];
// we convert to date format here itself less
var filteredDates = ent.filter(f => (f.entity === 'sys-date')).map(f => new Date(f.value));
var getCurrentDate = ()=>new Date();
var checkIfOlder = (f/*:dateformat*/) =>(f > getCurrentDate());
var replaceFutureDates = function(f/*:dateformat*/) {
return (checkIfOlder(f)) ? getCurrentDate() : f;
}
/* cleaner IMHO*/
var checkedDateFlag = filteredDates.every(checkIfOlder);
var checkedDate = filteredDates.map(replaceFutureDates);
/* combined function but very confusing output signature
var dateMapper = (dates, onlyCheck)=> {
if(onlyCheck) {
return dates.every(checkIfOlder);
}
return dates.map(replaceFutureDates);
}
var checkedDateFlag = dateMapper(filteredDates)
var checkedDate =dateMapper(filteredDates, true)
*/
推荐阅读
- android-tv - 如何从 Android 源获取 WebOs 应用
- c++ - “bool *”类型的值不能分配给“bool (*)(intenemy_piece)”类型的实体
- c++ - 超出数组的大小如何工作但数组不够大?TCP/IP 客户端
- python - 访问pyspark.sql Row对象的时间复杂度
- python - 归并排序与归并-插入混合排序的比较次数关系
- grafana - 使用 Grafana 和 Loki 删除重复条目
- python - 如何将我 CRUD 的数据保存到 json 文件(python)
- system - 每月系统 KPI 统计脚本
- excel - 如果相邻列等于“是”,Excel 仅添加到下拉列表
- javascript - 检查div何时滚动到末尾(垂直),然后继续滚动页面