2017-12-19 33 views
0

Ich versuche, eine Zeichenfolge mithilfe der Ausgabe aus zwei Sammlungen zu erstellen. Um dies zu tun, überspringe ich einen von ihnen mit der _forEach-Funktion und verwende seine Ausgabe als Eingabe für einen anderen Iterator. Aber ich kann es nicht funktionieren lassen.Verschachtelte Iteration über Sammlung

Code:

const data1 = [{ 
     label: 'Id', 
     data: 'id' 
     }, 
     { 
     label: 'First name', 
     data: 'first_name' 
     }, 
     { 
     label: 'Last name', 
     data: 'last_name' 
     }, 
     { 
     label: 'IP Address', 
     data: 'ip_address' 
     }, 
    ]; 

const data2 = [{ 
    "id": 1, 
    "first_name": "Robinet", 
    "last_name": "Golsby", 
    "ip_address": "201.83.127.236" 
}, { 
    "id": 2, 
    "first_name": "Kirby", 
    "last_name": "Feaver", 
    "ip_address": "143.188.49.149" 
}] 

let keys = ''; 
const getKeys = _.forEach(data1, value => keys += '' +value.data); 

let stringValue = ''; 
const getStringValue = _.forEach(tableData, value => stringValue += ' ' + value.first_name); 

So kann ich eine Liste der Schlüssel von dem ersten Objekt zu bekommen, und ich kann die Liste der Werte aus dem zweiten, aber nur dann, wenn der Schlüssel ist hartcodiert. Was ich tun möchte, ist, über jeden der Einträge in data2 im 'äußeren' Iterator zu iterieren, während Schlüssel zur Verfügung gestellt werden, um die Werte mit Iteration über data1 zu erhalten. Wie mache ich das?

Edit: das Endergebnis würde wie folgt aussehen:

1 Robinet Golsby 201.83.127.236

+3

Bitte ein Beispiel der gewünschten Ergebnis hinzuzufügen. –

Antwort

0

scheint wie:

const result = _.chain(data1) 
    .map('data') // get keys from data1 
    .thru(keys => _.map(data2, item => _.at(item, keys))) // iterate data2 and get values by keys 
    .map(values => _.join(values, ' ')) // values array to string 
    .value(); 

Ergebnis:

["1 Robinet Golsby 201.83.127.236", "2 Kirby Feaver 143.188.49.149"] 
0

Ich bin nicht sicher, ob dies ist genau das, was Sie wollen, aber ich denke, dass Sie Ihr Ziel mit Verschachtelung Array#map Anrufe erreichen können:

const data1 = [{"label":"Id","data":"id"},{"label":"First name","data":"first_name"},{"label":"Last name","data":"last_name"},{"label":"IP Address","data":"ip_address"}]; 
 
const data2 = [{"id":1,"first_name":"Robinet","last_name":"Golsby","ip_address":"201.83.127.236"},{"id":2,"first_name":"Kirby","last_name":"Feaver","ip_address":"143.188.49.149"}]; 
 

 
const result = data2.map((obj) => data1.map(({ label, data }) => ({ 
 
    label, 
 
    data: obj[data] 
 
}))); 
 

 
console.log(result);