例如我有这样的代码:
var myArr="14:44:45".split(":");
但有时时间价值没有"秒"信息。
var myArr="14:44".split(":");
基本上,有时字符串的值为"秒"有时候没有。所以如何检查myArr[2]
是否有价值。最佳做法是什么?
if(myArr.length === 3)
可以吗?
编辑:或
if(myArr[2])
答案 0 :(得分:3)
更好的方法是解构数组并检查变量seconds
let [h, m, s] = "14:44:45".split(":");
if (s) console.log('Has seconds');
let [hh, mm, ss] = "14:44".split(":");
if (!ss) console.log("Doesn't have seconds");

答案 1 :(得分:1)
正如其他人所说,你的方法几乎没法。您可能想要检查长度是否大于2而不是等于3,但这可能永远不会成为问题。
但我有另一个建议:
const timeParts = time => {
const [hours, minutes = 0, seconds = 0] = time.split(':').map(Number)
return {hours, minutes, seconds}
}
console.log(timeParts('14:44:45')) //=> {hours: 14, minutes: 44, seconds: 45}
console.log(timeParts('14:45')) //=> {hours: 14, minutes: 45, seconds: 0}

不是进行显式检查,而是简单地给出分钟和秒的默认值。如果您不想进行数字转换,请使用
替换函数的第一行const [hours, minutes = '00', seconds = '00'] = time.split(':')
答案 2 :(得分:0)
示例1 使用split()
和.length`以及ternary operator来比较数组的长度。如果您只有一个或两个时间戳,这就足够了。
示例2 使用 .map()
来迭代一组时间戳。每个时间戳都通过前一个示例中的相同功能进行比较。如果您有多个时间戳需要检查,请尝试此示例。
示例3 与上一个示例类似,它会将:00
附加到需要它的任何时间戳。如果您有多个时间戳并且实际上想要修复它们,请尝试此示例。
//~~~~~~~~~~~~If you have one or two timestamps~~~~~~~~~~~~~Example 1
function sec(stamp) {
return stamp.split(':').length < 3 ? 'No Seconds':'Has Seconds';
}
let r0 = sec("14:44:45");
let r1 = sec("14:44");
console.log(r0);
console.log(r1);
//~~~~~~~~~~~~If you have more than one timestamp~~~~~~~~~~~~Example 2
const times = ["14:44:45", "14:44", "20:59:10", "7:23:32", "3:04", "15:46", "8:18"];
const secChk = times.map(function(time) {
return time.split(':').length < 3 ? 'No Seconds':'Has Seconds';
});
console.log(secChk);
//~~~~~If you have more than one timestamp you want to fix~~~~Example 3
const secFix = times.map(function(time, index) {
return time.split(':').length < 3 ? '['+index+']: '+time+':00 - Fixed':'['+index+']: '+time;
});
console.log(secFix);