Autor Zpráva
soucekgns
Profil
Mám vícekrát se vyskytující podmínku
if (k==13||k==18||k==22...)
a
if (k!=13&&k!=18&&k!=22...)
Nešlo by toto nějak zkrátit nějakým univerzálním zápisem (a bez použití pole s for)? (Něco jako: k==(13,18,22))
Díky za rady
Someone
Profil
Můžeš si napsat funkci, která ověřuje, zda dané pole obsahuje danou hodnotu:

Array.prototype.obsahuje = function(hodnota) {
    for(var a=0;a<this.length;a++) {
        if(typeof this[a] != "undefined" && this[a] == hodnota) {
            return true;
        }
    }
    return false;
}

if([13,18,22].obsahuje(13)) {
    alert("Pole čísel obsahuje hodnotu 13");
} else {
    alert("Pole čísel hodnotu 13 neobsahuje");
}
Chamurappi
Profil
Reaguji na soucekgnse:
Některé prohlížeče podporují indexOf na poli. Do ostatních se musí doskriptovat (a v Array.prototype.indexOffor je). Pokud [13, 18, 22].indexOf(k) vrátí -1, tak je k jiné než 13, 18 i 22.
peta
Profil
soucekgns:
php tomu rika in_array (google=javascript in_array)
function inArray(needle, haystack) {
    var length = haystack.length;
    for(var i = 0; i < length; i++) {
        if(haystack[i] == needle) return true;
    }
    return false;
}

function in_array(needle, haystack) {
    for(var i in haystack) {
        if(haystack[i] == needle) return true;
    }
    return false;
}

function array_search(needle, haystack) {
    for(var i in haystack) {
        if(haystack[i] == needle) return i;
    }
    return false;
}
preca1
Profil
peta:
V JS se používá indexOf, taže bych do něj nezaváděl konvenci z PHP. Taky máš nekoncepční styl pojmenování funkcí (in_array a inArray, proč?). V JS je zvykem používat camelCase pro názvy metod a proměnnejch.
V JS se for in pro iterování přes prvky pole nepoužívá, protože to neni dobře - vysvětlení na SO.
joe
Profil
Ano, šlo.

var vysledek = false;

if (k==13||k==18||k==22...) {
  vysledek = true;
}

...

if (vysledek) {

}

...

if (vysledek) {

}
Chamurappi
Profil
Reaguji na joa:
To už by mohl místo prvních pěti řádků použít rovnou:
var výsledek = (k==13||k==18||k==22...);
Zřejmě ale netestuje ve všech podmínkách proti stejným hodnotám.


Reaguji na precu1:
Taky máš nekoncepční styl pojmenování funkcí (in_array a inArray, proč?).
Protože je to patlal, který jen kopíruje výsledky z Googlu a nepřemýšlí nad nimi. Funguje podobně jako AdSense, akorát s nižší mírou odpovědnosti.
peta
Profil
preca1, Chamurappi:
Ja? Co? Ty funkce jsem vykopiroval z jednoho odkazu na google. Neni to muj kod, co kritizujete.
Konkretne je to prvni odkaz: stackoverflow.com/questions/784012/javascript-equivalent-of-phps-in-array
Mozna by jste se meli zamyslet sami nad sebou nez se zacnete do nekoho dalsiho neopravnene navazet.
Moderátor Chamurappi: Neuvádíš zdroje. Někde něco najdeš, nevyzkoušíš to a okopíruješ to do diskuse, takže za to pochopitelně neseš plnou odpovědnost.

Navic, prave Chamurappi je ten, co mi maze odpovedi s getElementByClassName, ktere nektere prohlizece nepodporuji a sam takovou odpoved napsal a nesmazal si ji.
Moderátor Chamurappi: Ty ale ve svých odpovědích nezmiňuješ, že nefunguje všude. Další tvé mimotématické žblepty budu mazat. Chceš-li se s někým hádat, pořiď si manželku.
joe
Profil
Chamurappi:
Vím, že to jde a vy JavaScriptoví ultra odborníci to tak píšete, ale mně osobně přijde přehlednější si to většinou rozepsat :-)
1Pupik1989
Profil
Sám tedy používám něco podobného jako odkazoval peta to inArray.

Array.prototype.valueExists = function(n){
  var length = this.length;
  for(var i=0;i<length;i++){
    if(this[i] == n){ return true; }
  }
  return false;  
};

Array.prototype.contains = function(){
  var values = Array.prototype.slice.call(arguments),
      length = values.length;

  for(var i=0;i<length;i++){
    if(!this.valueExists(values[i])){ return false; };
  }
  
  return true;
};

A kontrola:

if([9,8,7,6,5,4,3,2,1].contains(1,2,3)){
  //obsahuje
}else{
  //neobsahuje
}

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0