Javascript для цикла до - множественные условия

Я использую javascript, используя регулярное выражение для очистки изображений из html-кода.

Я хочу, чтобы цикл работал до тех пор, пока script не найдет больше изображений или пока не достигнет 12.

Я пытаюсь выполнить следующее, но не работает:

var imgs = d.getElementsByTagName('img'), found = [];
for(var i=0,img; ((img = imgs[i]) || ( $i < 13)); i++)

Возможно ли это? Я на правильных строках?

Совершенно новый для javascript, но попытка!

Ответ 1

Вы должны использовать && вместо ||. Кроме того, $i должен быть i.

for(var i=0, img; (img = imgs[i]) && (i < 12); i++)
     found.push(img);

Ответ 2

Предполагая, что вы хотите, чтобы found содержал те первые 12:

var imgs = d.getElementsByTagName('img');
var found = [].slice.call(imgs, 0, 12);

Вы должны использовать [].slice.call(imgs, ...) вместо imgs.slice(), потому что imgs - это только псевдо-массив, а не реальный массив.

Альтернативой записи [].slice является Array.prototype.slice.

Если вы хотите сделать что-то еще внутри цикла, просто используйте созданный массив, чтобы убедиться, что вы работаете только с 1-м 12 изображениями:

for (var i = 0, n = found.length; i < n; ++i) {
    // do something with found[i];
}

Ответ 3

Я лично ненавижу, когда люди выполняют присваивание в условии условия цикла for, так как похоже на то, что кто-то ошибочно назначил (=) для сравнения (=== или ==). Лучше делать логику в другом месте.

var imgs = d.getElementsByTagName('img'), 
    found = [],
    i,
    imgsLength = imgs.length,
    max = imgsLength > 13 ? 13 : imgsLength;
for (i = 0; i < max; i++) {
    found.push(imgs[i]);
}

или

var imgs = d.getElementsByTagName('img'), 
    found = [],
    i,
    imgsLength = imgs.length;
for (i = 0; i < 13 && i < imgsLength; i++) {
    found.push(imgs[i]);
}