2016-10-19 1 views
0

Ich überprüfe, ob es irgendwelche "" Wert in einem Array-Elemente wie diese

"" in line.map(function(){return $(this).val();}).get() 

und es falsch zurückgibt, aber wenn ich es debuggen auf Browser erhalte ich diese auf Array

line.map(function(){return $(this).val();}).get() = ["1", "2", "4", "", "", "", "", "", "3"] 

ich nehme an, dass dies wahr richtig zurückkommen?

Ich habe bereits versucht, mit .each, aber ich kann es nicht zurück, wenn ich eine globale Variable mit einem

return false; verwenden

Antwort

2

The in operator nicht che ck ob ein Array einen Wert enthält (das wäre indexOf oder includes), es führt Eigenschaften für ein Objekt auf. Zum Beispiel:

const data = ['a', 'b', 'c', 'd', 'e', 'f']; 
 

 
for (f in data) { 
 
    console.log('gets the index:', f); 
 
    console.log('gets the value:', data[f]); // <- note the access using f 
 
}

Vielmehr sollten Sie find verwenden, wenn Sie das Element oder some benötigen, wenn Sie nur Präsenz müssen überprüfen:

const data = ['a', 'b', 'c', 'd', 'e', 'f']; 
 

 
console.log('find an element by value:', data.find(it => it === 'c')); 
 
console.log('check if any elements match:', data.some(it => it === 'c'));

+0

große ty übrigens was bedeutet es => es? –

+0

@ JoelRodrigues, das ist die Abkürzung für eine Lambda (oder Fettpfeil) -Funktion. Sie sind anonyme Funktionen, die normalerweise ein einzelner Ausdruck sind, perfekt für Prädikate in 'find' und Freunden. – ssube

+0

Ich sehe Vielen Dank Kerl Daumen hoch –

0

Sie sollten einen Filter verwenden, und die Überprüfung der Länge

var hasEmpty = line.filter(function(){ return $(this).val().trim() === ""}).length > 0; 

oder ein wenig mehr ES2015, Array.some auf einer jQuery Sammlung mit

var hasEmpty = line.toArray().some((el) => $(el).val() === ""); 
+1

Wenn Leistung zählt (** wenn **), würde ich zögern, 'Filter zu verwenden 'als ein Ersatz für' einige', da es nicht früh ausbrechen kann, während eine 'for'-Schleife es kann. Das betrifft auch * sehr * große Arrays. Dies funktioniert und funktioniert normalerweise gut, aber sie sind nicht völlig gleichwertig. – ssube

+0

@ssube - nein, sie sind nicht die gleichen, aber für eine Sammlung von Elementen sollte es keine Rolle spielen, außer das OP hat Millionen von Elementen natürlich? – adeneo

Verwandte Themen