2016-08-04 10 views
1

Also, ich versuche, eine Situation, um herauszufinden, wo ich b wäre Indexzahlen basieren auf Array füllen würde a ein Array (b[]) mit den Indexnummern von einem anderen Array (a[]), deren Elemente erfüllen eine bestimmte Kriterien (Array, das ist ein Array von Bildern und würde b auffüllen, wenn die Breite größer als die Höhe ist).Wie erhält man Werte von einem Array basierend auf einem anderen Array?

Also, ich kam mit einer hypothetischen Funktion in der Hoffnung auf eine Array-Ausgabe, wo ich eine Auflistung von a[] bekommen würde, die mit Werten von b[] übereinstimmen. Unnötig zu sagen, dass bei keinem dieser Versuche etwas von Wert aufkam.

var a = ['ab', 'bc', 'cd', 'de', 'ef', 'fg', 'gh', 'hi']; 
var b = [2, 4, 5]; 


var d = function(a, b) { 
    var func1 = []; 
    var func2 = []; 

    for(i = 0; i > b.length; i++) { 
    func1.push(a[b[i]]); 
    } 

    console.log('func1 = ' + func1); // 'func1 = []' 

    for(i=0; i > a.length; i++) { 
    if(b.indexOf(a.indexOf(a[i])) > -1) { 
     func2.push(a[i]) 
    } 
    } 
    console.log('func2 = ' + func2); // 'func2 = []' 
} 


d(a,b) // Ideally outputs ['cd', 'ef', 'fg'] 

Ist dies eine Frage der Funktionsumfang, oder bin ich dabei den Punkt .push?

+2

Verwendung "<" statt ">" in der for-Schleife – Superdrac

+1

Die furchtbar derpy von mir war. Vielen Dank! –

Antwort

1

Die Vergleiche in Ihren for-Schleifen sind rückwärts. Sie sollten so sein:

for(i = 0; i < b.length; i++) { 
    func1.push(a[b[i]]); 
    } 

    console.log('func1 = ' + func1); // 'func1 = []' 

    for(i=0; i < a.length; i++) { 
    if(b.index(a.indexOf(a[i])) > 1) { 
     func2.push(a[i]) 
    } 
    } 

Auch b.index ist keine Funktion. Ich nehme an, Sie indexOf gemeint:

var a = ['ab', 'bc', 'cd', 'de', 'ef', 'fg', 'gh', 'hi']; 
var b = [2, 4, 5]; 


var d = function(a, b) { 
    var func1 = []; 
    var func2 = []; 

    for(i = 0; i < b.length; i++) { 
    func1.push(a[b[i]]); 
    } 

    console.log('func1 = ' + func1); // 'func1 = []' 

    for(i=0; i < a.length; i++) { 
    if(b.indexOf(a.indexOf(a[i])) > 1) { 
     func2.push(a[i]) 
    } 
    } 
    console.log('func2 = ' + func2); // 'func2 = []' 
} 


d(a,b) // Ideally outputs ['cd', 'ef', 'fg'] 

Diese Ausgänge:

func1 = cd,ef,fg 
func2 = fg 
+0

Es sollte gemeint sein 'if (b.IndexOf (a.IndexOf (a [i]))> -1) '. In Bezug auf die Effizienz ist 'func1' besser als' func2', da es weniger Loops zu durchlaufen hat? –

0

Verwenden Sie stattdessen for(i=0; i < a.length; i++)! Richtige Syntax ist der Schlüssel zum Erfolg! Danke @Superdrac

Verwandte Themen