2017-10-03 2 views
0

Ich versuche, ein Array von Objekten mit Lodash zu ändern, und ein wenig zu kämpfen. Ich möchte das Array unten nehmen und die Schlüssel in den Objekten ändern.Ändern Sie Schlüssel in Array mit Lodash

Hier ist meine Quelle Array:

[ 
    { 
     "id": "AD", 
     "name": "Andorra", 
     "currency": "EUR", 
     "timezone": "Europe/Andorra", 
     "links": [ 
      { 
       "rel": "self", 
       "href": "http://localhost:8000/api/countries/AD" 
      }, 
      { 
       "rel": "country.currency", 
       "href": "http://localhost:8000/api/currencies/EUR" 
      } 
     ] 
    }, 
    { 
     "id": "AE", 
     "name": "United Arab Emirates", 
     "currency": "AED", 
     "timezone": "Asia/Dubai", 
     "links": [ 
      { 
       "rel": "self", 
       "href": "http://localhost:8000/api/countries/AE" 
      }, 
      { 
       "rel": "country.currency", 
       "href": "http://localhost:8000/api/currencies/AED" 
      } 
     ] 
    }, 
    ... 
    ] 

ich dies zu folgenden Ergebnissen führen würden:

[ 
    { 
     "value": "AD", 
     "title": "Andorra", 
     "currency": "EUR", 
     "timezone": "Europe/Andorra", 
     "links": [ 
      { 
       "rel": "self", 
       "href": "http://localhost:8000/api/countries/AD" 
      }, 
      { 
       "rel": "country.currency", 
       "href": "http://localhost:8000/api/currencies/EUR" 
      } 
     ] 
    }, 
    { 
     "value": "AE", 
     "title": "United Arab Emirates", 
     "currency": "AED", 
     "timezone": "Asia/Dubai", 
     "links": [ 
      { 
       "rel": "self", 
       "href": "http://localhost:8000/api/countries/AE" 
      }, 
      { 
       "rel": "country.currency", 
       "href": "http://localhost:8000/api/currencies/AED" 
      } 
     ] 
    }, 
    ... 
    ] 

Beachten Sie, dass die ersten beiden Tasten umbenannt werden. Ich weiß, dass ich _.mapKeys benutzen kann, um die Schlüssel zu ändern, jedoch bin ich nicht sicher, wie man das Array auf die beste Art und Weise dazu iteriert.

Alle Vorschläge würden sehr geschätzt werden.

+0

Iterate mit 'map' und bei jeder Iteration' mapKeys' laufen? – Dominik

+0

tolle Vorschläge, danke an alle – zag2010

Antwort

2

Ich ziehe es nicht um die Originaldaten zu verändern, um das, was würde ich tun ist:

const thing = [{id:"AD",name:"Andorra",currency:"EUR",timezone:"Europe/Andorra",links:[{rel:"self",href:"http://localhost:8000/api/countries/AD"},{rel:"country.currency",href:"http://localhost:8000/api/currencies/EUR"}]},{id:"AE",name:"United Arab Emirates",currency:"AED",timezone:"Asia/Dubai",links:[{rel:"self",href:"http://localhost:8000/api/countries/AE"},{rel:"country.currency",href:"http://localhost:8000/api/currencies/AED"}]}]; 

const newThing = []; 

thing.map(item => { 
    newThing.push(
     _.mapKeys(item, (value, key) => { 
      let newKey = key; 
      if(key === 'id') { 
       newKey = 'value'; 
      } 

      if(key === 'name') { 
       newKey = 'title'; 
      } 

      return newKey; 
     }) 
    ) 
}); 

console.log(newThing); 
1

Iterate mit Array#map (oder lodash des _.map()), und verwenden Sie Object#assign (oder _.assign()) ein neues Objekt mit dem Änderungsschlüssel zu erzeugen.

Assign wird ein Objekt mit neuen Schlüsseln mit den entsprechenden Werten aus dem ursprünglichen Objekt und dem ursprünglichen Objekt ohne die Schlüssel, die Sie ersetzen möchten, mithilfe von _.omit() verbinden.

var data = [{"id":"AD","name":"Andorra","currency":"EUR","timezone":"Europe/Andorra","links":[{"rel":"self","href":"http://localhost:8000/api/countries/AD"},{"rel":"country.currency","href":"http://localhost:8000/api/currencies/EUR"}]},{"id":"AE","name":"United Arab Emirates","currency":"AED","timezone":"Asia/Dubai","links":[{"rel":"self","href":"http://localhost:8000/api/countries/AE"},{"rel":"country.currency","href":"http://localhost:8000/api/currencies/AED"}]}]; 
 

 
var result = data.map(function(o) { 
 
    return Object.assign({ 
 
    value: o.id, 
 
    title: o.name 
 
    }, _.omit(o, 'id', 'name')); 
 
}); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

1

können Sie _.map verwenden und ein neues Objekt erstellen, die Schlüssel unter der Bedingung, basierend ändern und das neue Objekt zurück.

var obj = [{ 
 
    "id": "AD", 
 
    "name": "Andorra", 
 
    "currency": "EUR", 
 
    "timezone": "Europe/Andorra", 
 
    "links": [{ 
 
    "rel": "self", 
 
    "href": "http://localhost:8000/api/countries/AD" 
 
    }, { 
 
    "rel": "country.currency", 
 
    "href": "http://localhost:8000/api/currencies/EUR" 
 
    }] 
 
}, { 
 
    "id": "AE", 
 
    "name": "United Arab Emirates", 
 
    "currency": "AED", 
 
    "timezone": "Asia/Dubai", 
 
    "links": [{ 
 
    "rel": "self", 
 
    "href": "http://localhost:8000/api/countries/AE" 
 
    }, { 
 
    "rel": "country.currency", 
 
    "href": "http://localhost:8000/api/currencies/AED" 
 
    }] 
 
}]; 
 

 
var updatedObj = _.map(obj, function(currObj, index) { 
 
    var newObj = {}; 
 
    
 
    Object.keys(currObj).forEach(function(key) { 
 
     if(key === 'id') { 
 
    \t  newObj.value = currObj[key]; 
 
    \t } else if(key === 'name') { 
 
      newObj.name = currObj[key]; 
 
     } else { 
 
      newObj[key] = currObj[key]; 
 
     } 
 
    }); 
 
    return newObj; 
 
}); 
 

 
console.log(updatedObj);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

Verwandte Themen