2016-05-10 22 views
2

Knockout-Dienstprogramme haben einige ordentliche Array-Filter-Tools, die ich nicht finden kann mit eckigen eingebaut.Eckiges Äquivalent von ko.utils.arrayFirst()

In Knockout, ich würde das tun:

ko.utils.arrayFirst(myArray, function(item){ 
    return item.property === criteria; 
}); 

In kantig, ich bin derzeit mit diesem:

for(var x = 0; x < myArray.length; x++){ 
    if (myArray[x].property === criteria){ 
     return myArray[x]; 
     break; 
    } 
} 

Ich verstehe, dass ich auch angular.forEach hier verwenden könnte, aber ich bin auf der Suche nach etwas Ähnliches wie die arrayFirst mit Knockout. Ich weiß auch, wie man das als Helfer in Angular schreibt, ich will nur wissen, ob es schon eingebaut ist.

+0

Wenn Sie nur die neuesten Browser unterstützen müssen, können Sie auch 'Array.prototype.find' verwenden. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find – user3297291

Antwort

2

Ich denke, eine einfache Filterung eines Arrays helfen kann:

var foundItem = myArray.filter(function(item) { return item.property === criteia; })[0]; 

„foundItem“ wird nicht definiert, wenn nichts gefunden wurde.

+0

Ja, das funktioniert gut. Ich bin kein großer Fan davon, das '[0]' am Ende dort zu werfen, ich denke, das macht es etwas schwieriger zu lesen, da es leicht übersehen wird. Das ist nur eine Meinung –

1

Wie wäre es mit AngularJs filter Funktion?

var filtered = $filter('filter')(myArray, { property: criteria }); 
var item = filtered.shift();