检查数组元素是否有价值

时间:2018-02-18 20:03:03

标签: javascript

例如我有这样的代码:

var myArr="14:44:45".split(":");

但有时时间价值没有"秒"信息。

var myArr="14:44".split(":");

基本上,有时字符串的值为"秒"有时候没有。所以如何检查myArr[2]是否有价值。最佳做法是什么?

if(myArr.length === 3) 

可以吗?

编辑:或  if(myArr[2])

3 个答案:

答案 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);