Использование оператора if с оператором in - PullRequest
0 голосов
/ 27 июля 2011
var srcType = source.slice(source.lastIndexOf('.'));
//srcType = fileExtension
var imageFormats = ['.jpg','.png','.gif'],
videoFormats = ['.ogv','.png','.gif'];
// two lists, acceptable video/image types
var htmlSting = ''; / /initialize the htmlstring

if (srcType in imageFormats) //heres where my question is!!!
    htmlString = '<img class="empty" id="it" src="'+source+'"> </img>';
else
    htmlString = '<video class="empty" id="it" src="'+source+'" controls> </img>';
// these statements choose the proper media type.

Хорошо, вот в чем дело: я пишу что-то, что должно выбрать html на основе типа файла.Есть ли способ достичь (srcType в imageFormats)?Это не работаетНужен ли мне цикл?Я всегда мог использовать или в html, но это было бы исчерпывающим, поскольку мы добавляем форматы.Причина, по которой мне не нравится цикл for, заключается в том, что он использует драгоценное время в критически важной области.

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Операция in работает только со свойствами объекта, а не со значениями массива.Я думаю, что вы хотите indexOf (srcType), который возвращает -1, если не найден, или индекс, если найден.

imageFormats.indexOf('.jpg'); // => 0
imageFormats.indexOf('.foo'); // => -1

if(imageFormats.indexOf(srcType)){ }

var obj = {a: 1};
if('a' in obj){ } // evaluates to true
if('b' in obj){ } // evaluates to false
0 голосов
/ 27 июля 2011

Вы можете использовать indexOf для объекта Array.См. этот вопрос для получения подробной информации о параметрах, доступных в библиотеках javascript.

indexOf доступен из JavaScript 1.6 (ECMAScript 5-е издание), и для старых браузеров на странице MDC есть откат.

Причина, по которой мне не нравится цикл for, заключается в том, что он использует драгоценное время в критической для времени области.

Вам нужно будет предоставить больше подробностей.Простой цикл не займет много времени, и все, что у вас есть, это набор из трех элементов в массиве.Даже с вероятностью того, что это станет 50 или 100, цикл for не должен быть большой проблемой.

Кроме того, если вы можете дать намерение о том, что вы делаете (и когда), вы можете стать лучшеответы.

...