2015-11-19 14 views
5

ich zehn Arrays mit leeren Wert habenGibt die Anzahl der nicht leeren Elemente aus verschachtelten Arrays

onTable[0 to 10]; 

schauen

["Jean5", "Jean3", "Paul2", "Jean6", "", "Paul4", "Jean", "peirre4", ""] 
["Paul5", "peirre6", "peirre3", "", "Jean4", "Paul", "peirre5", "Jean2", ""] 
... 

I Länge jedes Array erhalten möchten, ohne leeren Wert und erstellen, ohne zehn Variablen um das zu überprüfen.

Ich habe diese Lösung count empty values in array testen, aber ich möchte nicht zehn Variable machen. zB: count1, count2,....

Ich überprüfe auch compare two arrays based on length: skip empty values aber ist nicht was ich will.

Wenn möglich, möchte ich aussehen wie

onTable[0].length(exclude("")) 

Was der gute Weg ist, dass für die machen?

+0

Verwenden Sie filter() und entfernen Sie leere Wert, dann erhalten Sie die Länge –

+0

Ich möchte nicht Wert aus dem Array entfernen –

+0

Filter wird das vorhandene Array nicht aktualisieren .... es ist nur das neue Array zurückgeben –

Antwort

8

Verwenden Sie filter mit , um nicht leere Elemente aus dem Unterfeld zu filtern und verwenden Sie length darauf.

onTable[0].filter(Boolean).length 

Da leere Zeichenfolge in JavaScript falsch ist, wird sie aus dem gefilterten Array entfernt.

Demo:

var arr = [ 
 
    ["Jean5", "Jean3", "Paul2", "Jean6", "", "Paul4", "Jean", "peirre4", ""], 
 
    ["Paul5", "peirre6", "peirre3", "", "Jean4", "Paul", "peirre5", "Jean2", ""] 
 
]; 
 

 
var len = arr[1].filter(Boolean).length; 
 
document.write(len);

0

Sie Filterfunktion für Ihren Bedarf verwenden können: Wert überprüfen, um undefined oder null usw.

var arr = [ 
 
    ["Jean5", "Jean3", "Paul2", "Jean6", "", "Paul4", "Jean", "peirre4", ""], 
 
    ["Paul5", "peirre6", "peirre3", "", "Jean4", "Paul", "peirre5", "Jean2", ""] 
 
]; 
 

 
var len = arr[1].filter(function(x){ return x != ""}).length; 
 
document.write(len);

1

Mit einem prototype:

Array.prototype.lengthWihtoutEmptyValues = function() { 
 
    var initialLength = this.length; 
 
    var finalLength = initialLength; 
 

 
    for (var i = 0; i < initialLength; i++) { 
 
     if (this[i] == "") { 
 
      finalLength--; 
 
     } 
 
    } 
 

 
    return finalLength; 
 
} 
 

 
var arrays = [ 
 
    ["Jean5", "Jean3", "Paul2", "Jean6", "", "Paul4", "Jean", "peirre4", ""], 
 
    ["Paul5", "peirre6", "peirre3", "", "Jean4", "Paul", "peirre5", "Jean2", ""] 
 
]; 
 

 
var arrayLength = arrays[0].lengthWihtoutEmptyValues(); 
 

 
$("#arrayLength").html(arrayLength);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="arrayLength"></div>

0

Sie sollten es vermeiden, "verschwenden" Gedächtnis und übermäßigen GC zu induzieren. Sie können reduce() jede Subarray, um eine Anzahl von ihm ist nicht leere Werte:

sub.reduce(function(prev, cur) { 
    return prev + (!!cur); 
}, 0); 

Um das gesamte Master-Array zu bearbeiten, können Sie es auf einer Länge map():

var arr = [ 
 
    ["Jean5", "Jean3", "Paul2", "Jean6", "", "Paul4", "Jean", "peirre4", ""], 
 
    ["Paul5", "peirre6", "peirre3", "", "Jean4", "Paul", "peirre5", "Jean2", ""], 
 
    ["Just1", "", ""] 
 
]; 
 

 
var lengths = arr.map(function(sub) { 
 
    return sub.reduce(function(prev, cur) { 
 
    return prev + (!!cur); 
 
    }, 0); 
 
}); 
 
document.write('[' + lengths.join('], [') + ']');

Verwandte Themen