Mam tablicę jak var mya = ["someval1", "someotherval1", "someval2", "someval3"]; i mam funkcję, która odbiera obiekt z właściwością ustawioną na jedną z tych nazw.

Sense ma sens do iteracji w tablicy i dla każdego sprawdzenia, czy mogę go znaleźć w tablicy, jak w oświadczeniu for. Wydaje się, że wygląda na bardziej wydajną metodę użycia oświadczenia switch w tym przypadku, ponieważ tablica jest statyczna i zadanie, gdy znajdę nieruchomość zależy od której znaleziono właściwość.

Jak to zrobić za pomocą tablicy przełączającej? Coś w rodzaju tego kodu pseudo:

switch(mya.forEach) { 
    case "someval1": 
        alert("someval1"); 
        break; 
    ... 
    default: 
        alert("default"); 
        break; 
}

Ale to tylko raz dzwoni.

Oba odpowiedzi podane są kodem, jakie już mam - chyba nie ma czyszczenia foreach preparat switch.

2
roberto tomás 1 grudzień 2013, 18:16

3 odpowiedzi

Najlepsza odpowiedź
for( var i=0; i<mya.length; i++ ){
    switch( mya[i]) { 
        case "someval1": 
            alert("someval1"); 
            break; 
        ... 
        default: 
            alert("default"); 
            break; 
    }
}
5
sanchez 1 grudzień 2013, 14:18

Ponieważ switch nie jest foreach.

for (var i in mya)
{
    switch (mya[i])
    {
        ...
    }
}
1
Cobra_Fast 1 grudzień 2013, 14:19

Biorąc pod uwagę, że uważasz za użycie forEach Zakładam, że nie jesteś zbyt zaniepokojony wspierającym starszymi przeglądarkami, w którym to przypadku będzie miała znacznie więcej sensu używać Array.indexOf():

var mya = ["someval1", "someotherval1", "someval2", "someval3"],
    returnedFunctionValue = returnRandomValue();

console.log('Searching for: "' + returnedFunctionValue + '."');

if (mya.indexOf(returnedFunctionValue) > -1) {
    // the value held by the returnedFunctionValue variable is contained in the mya array
    console.log('"' + returnedFunctionValue + '" at array-index: ' + mya.indexOf(returnedFunctionValue));
}
else {
    // the value held by the returnedFunctionValue variable is not contained in the mya array
    console.log('"' + returnedFunctionValue + '" not held in the array');
}

Proste JS Fiddle Demo.

Chociaż można oczywiście użyć Array.prototype.forEach (w nowoczesnych przeglądarkach):

var mya = ["someval1", "someotherval1", "someval2", "someval3"],
    returnedFunctionValue = returnRandomValue();

mya.forEach(function(a, b){
    if (a === returnedFunctionValue) {
        console.log('Found "' + returnedFunctionValue + '" at index ' + b);
    }
});

Proste JS Fiddle Demo.

1
David says reinstate Monica 1 grudzień 2013, 15:08