Лучший способ разделения и присвоения многих значений в Javascript? - PullRequest
1 голос
/ 11 марта 2012

У меня есть цикл for, который циклически перебирает количество элементов, созданных пользователем. В этом плагине много доступных настроек, и каждый элемент может получить свои специфические настройки.

  1. Пользовательские настройки вводятся в следующем формате: speed_x: "1000 500> 1000 200> 0,0" Управляет входом / выходом speed_x для 3 отдельных элементов . > делится на объект, а запятые разделяют вход / выход.

  2. Таким образом, я могу получить конкретные значения speed_x объекта, я разбил speed_x на speed_x_set (split by>), что привело к:

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 ]

2 голосов
/ 11 марта 2012

Я бы избегал доступа к одному и тому же элементу дважды и выполнял один и тот же 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 голос
/ 11 марта 2012

Я бы сказал, чтобы кэшировать результат разделения

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];
   ...
};
0 голосов
/ 11 марта 2012

То, что вы ищете, называется параллельное присваивание , но, к сожалению, в JavaScript его нет.

Однако в ruby ​​часто встречаются похожие шаблоны:

first, second = "first second".split

Как уже отмечали другие, очевидным способом было бы кэшировать результаты разделения и назначать их отдельно.Извините, что не ответили на ваш вопрос напрямую.

...