在Javascript中分割和分配许多值的更好方法?

时间:2012-03-11 17:32:33

标签: javascript arrays variables loops split

我有一个for循环,它遍历用户创建的元素数量。此插件中有许多可用设置,每个元素都可以接收它的特定设置。

  1. 用户设置按以下格式输入: speed_x:“1000,500> 1000,200> 0,0” 这可以控制 3个单独元素的speed_x输入/输出。 > 按对象划分,逗号分隔输入/输出。

  2. 所以我可以抓取特定的对象speed_x值,我将speed_x分成speed_x_set(按>分割),结果是:

  3.   

    1 1000,500
            2 1000,200
            3 0,0`

    3在循环中,我通过索引获取值(因为它是对象#)并用逗号分隔(以获取speed_x_in和speed_x_out。)

    for(var i=0; i<OS.numberofobjects; ++i){
       OS.speed_x_on_set[i]=speed_x_set[i].split(",")[0],
       OS.speed_x_off_set[i]=speed_x_set[i].split(",")[1],
       ...
    };
    

    所有内容都按对象分配,并通过正确设置/进入主操作系统设置对象。 T * 他的问题是我有很多很多设置需要以这种方式分割...... * 例如:delay_x_set,speed_y_set,opacity_set等。它们的名字都是基于默认设置名称,如上所示添加了“_set”。希望这能提供足够的信息。谢谢!

3 个答案:

答案 0 :(得分:2)

我会避免两次访问同一个项目,并为每次迭代执行两次相同的split。所以,你可以有类似的东西:

for (var i = 0, item; item = speed_x_set[i++];) {
  var values = item.split(",");
  OS.speed_x_on_set.push(values[0]);
  OS.speed_x_off_set.push(values[1]);
}

请注意,在JavaScript 1.7(Firefox)中,您只需:

for (var i = 0, item; item = speed_x_set[i++];) {
  var [on, off] = item.split(",");
  OS.speed_x_on_set.push(on);
  OS.speed_x_off_set.push(off);
}

希望在ECMAScript的下一个版本中也是如此。 它被称为“解构分配”。

答案 1 :(得分:1)

我想说缓存拆分结果

for(var objindex=0; objindex<OS.numberofobjects; ++objindex){
   var splits = speed_x_set[objindex].split(","); //Cache the split so its does not need to be done twice
   OS.speed_x_on_set[objindex] = splits[0];
   OS.speed_x_off_set[objindex] = splits[1];
   ...
};

答案 2 :(得分:0)

您正在寻找的是parallel assignment,但不幸的是,JavaScript没有它。

然而,在红宝石中,通常会看到类似的模式:

first, second = "first second".split

正如其他人所说,显而易见的方法是缓存拆分结果并单独分配。很抱歉没有直接回答您的问题。