javascript: построение условных элементов массива - PullRequest
2 голосов
/ 17 января 2011

если у меня есть такой массив:

thisarray = new Array("this", "that", "theotherthing");

как я могу построить условное выражение так:

if(thisarray[0] == thisvar && thisarray[1] == thisvar && thisarray[2] == thisvar) { 
    //do something
}

оговорка в том, что я не знаю, сколько предметов может быть в этом массиве. Я немного озадачен тем, как этого добиться. Любая помощь будет оценена.

Ответы [ 6 ]

2 голосов
/ 25 октября 2011

Если у вас есть поддержка Javascript 1.6, вы можете сделать это в одну строку:

if (thisarray.every(function(e) { return (e == thisvar); })) {
  // Do stuff
}

MDN ссылка

1 голос
/ 17 января 2011

Вы можете написать функцию:

function all(arr, f) {
  for (var i = 0; i < arr.length; ++i)
    if (!f(arr[i], i)) return false;
  return true;
}

Тогда вы можете позвонить:

if (all(thisArray, function(a) { return a === thisvar; })) {
  // all equal
}
1 голос
/ 17 января 2011

Вы можете использовать цикл for для «итерации» по элементам в массиве, каждый раз проверяя значение.

var result = true;
for(var x=0; x < thisarray.length; x+=1){
    if(thisarray[x] != thisvar){
       result = false;
    }
}

result будет истинным, если каждый элемент массива равен thisvar, и ложным, если имеется несоответствие.

1 голос
/ 17 января 2011
var valid = true;
for(var i=0; i<thisarray.length && valid; ++i){
    if (thisarray[i] != thisvar)
        valid = false;
}
//use valid
if(valid)
{
    //Do your stuff
}
0 голосов
/ 17 января 2011

Просто имейте массив фактических значений и массив ожидаемых значений, а затем сравнивайте элементы.Как то так:

function arraysEqual(actual, expected) {
  if (actual.length !== expected.length) { return false; }
  var count = actual.length;
  for (i = 0; i < count; i++) {
    if (actual[i] !== expected[i]) { return false; }
  }
  return true;
}
0 голосов
/ 17 января 2011

ОБНОВЛЕНИЕ: я неправильно прочитал ваш запрос, чтобы проверить, совпадает ли какой-либо из элементов, когда вы запрашивали соответствие всех элементов. Я оставляю здесь свой ответ для справки, если вы хотите, чтобы условие было истинным для любого совпадения.

Вы можете просто перебирать элементы с помощью цикла for, например:

for (var i = 0; i < thisarray.length; i++) {
    if (thisarray[i] == thisvar) {
        // do something
        break; // so it doesn't repeat if there are multiple matches
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...