Javascript分配多个数组

Javascript assigning multiple arrays

本文关键字:数组 分配 Javascript      更新时间:2023-09-26

我需要在一个特定的函数中使用各种数组,但我忍不住认为我这样做的效率非常低:

function GetTimeLeft(){
var TimeUnformatted = document.querySelectorAll('[id="SomeIdName"]')[0].innerText.match(/'d{1,}d's'd{1,}h/ig);
var i;
if (TimeUnformatted){
    var Daysunformatted = [];
    var Hoursunformatted = [];
    var DaysFormatted = [];
    var HoursFormatted = [];
    var DaysToSeconds = [];
    var HoursToSeconds = [];
    var TimeInSeconds = [];
    for (i=0;i<TimeUnformatted.length;i++){
        Daysunformatted[i]  = TimeUnformatted[i].match(/'d{1,}d/)[0];
        Hoursunformatted[i] = TimeUnformatted[i].match(/'d{1,}h/)[0];
        if (Daysunformatted[i])  DaysFormatted[i]  = Number(Daysunformatted[i].match(/'d{1,}/)[0]);
        if (Hoursunformatted[i]) HoursFormatted[i] = Number(Hoursunformatted[i].match(/'d{1,}/)[0]);
        if (DaysFormatted[i])  DaysToSeconds[i]  = DaysFormatted[i]*24*60*60;
        if (HoursFormatted[i]) HoursToSeconds[i] = HoursFormatted[i]*60*60;
        if (DaysToSeconds[i] && HoursToSeconds[i]) TimeInSeconds[i] = DaysToSeconds[i] + HoursToSeconds[i];
    }
    return TimeInSeconds;//an Array.
} else {
    return [0];
}

}

编辑:为了澄清,因为我表达得很糟糕。我试着"在旅途中分配",没有初始的var语句,但javascript大喊大叫,告诉我他没有期望的"[":
function GetTimeLeft(){
var TimeUnformatted = document.querySelectorAll('[id="SomeIdName"]')[0].innerText.match(/'d{1,}d's'd{1,}h/ig);
var i;
if (TimeUnformatted){
    for (i=0;i<TimeUnformatted.length;i++){
        var Daysunformatted[i]  = TimeUnformatted[i].match(/'d{1,}d/)[0];
        var Hoursunformatted[i] = TimeUnformatted[i].match(/'d{1,}h/)[0];
        if (Daysunformatted[i])  var DaysFormatted[i]  = Number(Daysunformatted[i].match(/'d{1,}/)[0]);
        if (Hoursunformatted[i]) var HoursFormatted[i] = Number(Hoursunformatted[i].match(/'d{1,}/)[0]);
        if (DaysFormatted[i])  var DaysToSeconds[i]  = DaysFormatted[i]*24*60*60;
        if (HoursFormatted[i]) var HoursToSeconds[i] = HoursFormatted[i]*60*60;
        if (DaysToSeconds[i] && HoursToSeconds[i]) var TimeInSeconds[i] = DaysToSeconds[i] + HoursToSeconds[i];
    }
    return TimeInSeconds;//an Array.
} else {
    return [0];
}

我知道我可以做多个任务,但是,没有更好的方法来做我想做的吗?

这行代码的问题是变量,去掉var,它就像上面的代码一样工作。

Daysunformatted[i]  = TimeUnformatted[i].match(/'d{1,}d/)[0];

我能看到改进代码的唯一方法是将reg exp移出for循环。

var reDays = /'d{1,}d/;
var reHours = /'d{1,}h/;
for (i=0;i<TimeUnformatted.length;i++){
        Daysunformatted[i]  = TimeUnformatted[i].match(reDays)[0];
        Hoursunformatted[i] = TimeUnformatted[i].match(reHours)[0];

您可以使用捕获组来获取小时数,这样您就不必进行第二次匹配,从而减少d/h。

var reDays = /('d{1,})d/;
var TimeUnformatted = "10d 1h";
 Daysunformatted[i]  = (TimeUnformatted[i].match(reDays) || [,])[1];