2017-01-23 4 views
1

Neu bei Javascript, immer noch verwirrt über ParameterÜber Funktion und Parameter

Hier sind einige Codes:

var people = [{            
    name: 'Casey',        
    rate: 60 
}, 
{ 
    name: 'Camille', 
    rate: 80 
}, 
{ 
    name: 'Gordon', 
    rate: 75 
}, 
{ 
    name: 'Nigel', 
    rate: 120 
} 
]; 

function priceRange(person) {       
return (person.rate >= 65) && (person.rate <= 90); 
}; 

var results = [];        
results = people.filter(priceRange);   

Ich weiß, dass dies eine sehr grundlegende Frage ist, aber ich will nur den Parameter „Person kennen ".Wie wusste der Computer, dass der Parameter" Person "vom Objekt" Leute "kommt?

+0

Hilft Ihnen die Dokumentation [Array # filter] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)? –

Antwort

1

Datenstrukturen:

  • [....] dies ist ein Array

  • {attr1:'val1', attr2: 'val2',. ...} Dies ist ein literales Objekt.

people ist ein Array von Objekt-Literal s, und jedes Objekt hat zwei Attribute (Schlüssel): name & Rate.

Functional Programming:

Da people ist ein Array liefert Array-Klasse einen Satz von Methoden, nämlich filter() die als erstes Argument annimmt: FUNCTION.

filter() wird die Funktion (1ˢᵗ Argument von filter) für jedes Element ausführen, dann, wenn es true zurückgibt, akzeptiert es das Element und umgekehrt.

Nehmen wir ein Beispiel einfacher als das, was Sie haben: Lassen Sie uns an Array of digits

const arrayOfDigits = [23, 400 , 99, 4, 222]; 
 

 

 
function exceed100(element) { 
 
    return element > 100; 
 
} 
 

 
console.log(
 
    arrayOfDigits.filter(exceed100) 
 
)

Beispiel nehmen oben filtert alle Ziffern kleiner oder gleich nur Ziffern halten 100.and übersteigt 100

+0

Danke, ich verstehe, wie funktioniert das filter(), ich verwirre nur mehr über die Frage der Parameterübertragung. Ich weiß, dass Person der Parameter in der Funktion priceRange() ist, aber woher kommt "person" und warum ist person.name gleich people.name? – jessica

+0

Behalten Sie die folgende Callback-Regel im Hinterkopf: Sie können einen beliebigen Namen für das Argument wählen ('person',' element', ... 'item'), aber Sie sollten die Reihenfolge beibehalten (' person' ist der 1ˢᵗ arg, 'index 'ist die 2ⁿᵈ arg .. so weiter) –

0

Die Funktion Array.prototype.filter() durchläuft das Array, das sie aufgerufen hat, und ruft die Callback-Funktion mit jedem Element als Argument auf. Wenn Sie also people.filter(priceRange) verwenden, ruft die filter()-Funktion priceRange mit jedem Element people auf. Der Code von filter() ist so etwas wie dieses (ich habe es stark vereinfacht nur um zu zeigen, wie dieser Teil funktioniert):

function filter(callback) { 
    var result = []; 
    for (var i = 0; i < this.length; i++) { 
     if (callback(this[i])) { 
      result.push(this[i]); // This gets person from people 
     } 
    } 
    return result; 
}