Ich versuche die Funktion _.invoke des Unterstrichs zu erstellen. Ich kann nicht herausfinden, warum ich einen TypeError bekomme, kann Eigenschaft 'sort' von undefined nicht lesen. Ich nehme an, dies bezieht sich auf das Array, das an die Funktion übergeben wird, aber ich kann jedes Array in der Sammlung protokollieren, so dass ich nicht weiß, warum undefiniert beim Hochladen.Erstellen eines vereinfachten Unterstrichs _.invoke
function each(collection, iteratee, context) {
let i
let boundIteratee = iteratee.bind(context)
if (Array.isArray(collection)) {
for (i = 0; i < collection.length; i++) {
boundIteratee(collection[i], i, context)
}
} else {
for (i in collection) {
if (collection.hasOwnProperty(i)) {
boundIteratee(collection[i], i, collection);
}
}
}
return collection
}
function map(collection, iteratee, context) {
let result = []
let formula = function(element, index) {
result.push(iteratee(element, index, context))
}
each(collection, formula, context)
return result
}
function invoke(collection, methodName) {
let args = Array.prototype.slice.call(arguments, 2)
let formula = function(array, index) {
//console.log(array) --> returns arrays in collection...
return methodName.apply(array, args)
}
return map(collection, formula)
}
function sortIt(array) {
return array.sort()
}
console.log(invoke([
[3, 1, 2],
[7, 6, 9]
], sortIt))
Bitte gewöhnen Sie sich an, Anweisungen mit ';' zu beenden. Automatisches Einfügen von Semikolons erfüllt nicht immer das, was Sie erwarten. – Barmar
Das Problem ist, dass Sie nie ein Array in Ihre 'sortIt' Funktion übergeben. Ihre Argumente enthalten nicht die Sammlung, die Sie sortieren möchten. – nainy