2017-06-14 1 views
0

Ich versuche, eine mapDeep Funktion (Karte rekursiv eine verschachtelte Array) zu bauen:Wie behebt man die folgende mapDeep-Funktion?

mapDeep (array, callback) { 
    return array.map(item => { 
    if (Array.isArray(Object.values(item)[0])) { 
     return mapDeep(Object.values(item)[0]) 
    } else { 
     return callback(Object.values(item)[0]) 
    } 
    }) 
}, 

mapDeep(input.schema, field => { 
    console.log('field:', field) 
}) 

Gerade jetzt die folgende Fehlermeldung erhalte ich: Uncaught TypeError: callback is not a function

wie Sie den Code ändern die Funktion reparieren?

Codepen

Eingang:

schema: [{ 
    fields: [{ 
    (...) 
    }, { 
    (...) 
    }] 
}, { 
    fields: [{ 
    (...) 
    }] 
}] 
+0

"*' Object.values ​​(Artikel) [0] '*" ? Tu das nicht. Sei ausdrücklich darüber, dass du 'item.fields' meinst. Übergeben Sie den Eigenschaftsnamen als weiteren Parameter, wenn Sie ihn als generisch benötigen. – Bergi

Antwort

2

Führen Sie das Argument auf den rekursiven Aufruf:

function mapDeep (array, callback) { 
    return array.map(item => { 
    if (Array.isArray(Object.values(item)[0])) { 
     return mapDeep(Object.values(item)[0], callback) 
//           ^^^^^^^^ 
    } else { 
     return callback(Object.values(item)[0]) 
    } 
    }) 
} 
Verwandte Themen