我有一个for循环,它遍历用户创建的元素数量。此插件中有许多可用设置,每个元素都可以接收它的特定设置。
用户设置按以下格式输入: speed_x:“1000,500> 1000,200> 0,0” 这可以控制 3个单独元素的speed_x输入/输出。 > 按对象划分,逗号分隔输入/输出。
所以我可以抓取特定的对象speed_x值,我将speed_x分成speed_x_set(按>分割),结果是:
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”。希望这能提供足够的信息。谢谢!
答案 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
正如其他人所说,显而易见的方法是缓存拆分结果并单独分配。很抱歉没有直接回答您的问题。