2016-05-18 18 views

risposta

5

Mentre Lim's answer è grande per l'esempio specifico che hai postato, questo dovrebbe gestire ogni caso d'uso di _.findWhere:

function myFindWhere(array, criteria) { 
    return array.find(item => Object.keys(criteria).every(key => item[key] === criteria[key])) 
} 

Restituisce il primo elemento della matrice di ingresso per la quale tutti definiti le proprietà dei criteri sono abbinate (o undefined se non esiste tale elemento), che a mio avviso è il contratto di _.findWhere.

Ecco come usarlo per gestire il tuo esempio:

myFindWhere($scope.template, {id: $scope.approveTemplate}) 

E qui ci sono un banco di prova alcuni ho usato per provarlo:

myFindWhere ([{ "a": 0, "b": 1}, {"a": 1}, {"b": 1}], {"a": 0})
> Oggetto {a: 0, b: 1}
myFindWhere ([ {"a": 0, "b": 1}, {"a": 1}, {"b": 1}], {"b": 0})
> undefined
myFindWhere ([{"a": 0, "b": 1}, {"a": 1}, {"b": 1}], {"b": 1})
> Oggetto {a: 0, b: 1}
myFindWhere ([{"a": 0, "b": 1}, {"a": 1}, {"b": 2}], {"b": 2})
> Oggetto {b: 2}

11
$scope.template.find(t => t.id === $scope.approveTemplate) 
+0

Puoi spiegare come funziona? – maskedbacon

+0

@maskedbacon Vedere la [documentazione del metodo 'find()'] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find). In sostanza, il metodo accetta una funzione di callback che determina quale elemento dell'array corrisponde alla ricerca. In questo esempio la callback è definita come [funzione freccia ES6] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions). – Boaz