Манипуляции со строками в JavaScript с определенная логика в этом


Как бы мне сделать этот код выглядит менее уродливо?

// we are looping over an array of images
// width is a parameter passed to the current function 
//
// the resulting string looks like this: "30px 0"
// (it's a tool that returns coordinates for a CSS sprite)
// when iterating over the first item, we don't need 
// to add "-" and "px" to X coordinate
result.push(
    ( i === 0 ? "0" : "-" + i * ( ( is2PixelRatio ? width / 2 : width ) + 10 ) + "px" ) + " 0"
);


269
2
задан 29 июня 2011 в 09:06 Источник Поделиться
Комментарии
2 ответа

Незначительные обновления, хорошая идея с предварительным заполнением Raynos результат

result = ["0 0"]; // Outside of loop

// ...

if (is2PixelRatio) width /= 2;
width += 10; // [Insert magik number explanation here]

result.push( -(i * width) + "px 0" ); // Negative numbers will convert to "-30"

5
ответ дан 28 августа 2011 в 04:08 Источник Поделиться

// old

var result = [], width, is2PixelRatio;
for (var i = 0; i < 10; i++) {
width = i;
result.push(
( i === 0 ? "0" : "-" + i * ( ( is2PixelRatio ? width / 2 : width ) + 10 ) + "px" ) + " 0"
);
}
console.log(result);

// new

var result2 = ["0 0"], width, is2PixelRatio = true;
for (var i = 1; i < 10; i++) {
width = i;
result2.push("-" + i*(width+10) + "px 0");
}
if (is2PixelRatio) {
result2 = result2.map(function(val) {
return val.replace(/[\-]\d+/, function(v) {
return v / 2;
});
});
}
console.log(result2);

В принципе вводить значение по умолчанию в массив при старте. Тогда это делать, если is2PixelRatio логика в конце на весь массив.

Живой пример.

Использует Массив.прототип.карте

2
ответ дан 29 июня 2011 в 09:06 Источник Поделиться

Другие вопросы по теме
Что лучше (более проверяемым) способ структурировать эту страницу-конкретно в JS?
28 июня 2011 в 03:06
кнопки пользовательского интерфейса jQuery и некоторые расчеты
28 июня 2011 в 11:06
В JavaScript динамически