[英]Modify Keys in Array with Lodash
I'm attempting to modify an array of objects with lodash, and struggling a bit.我正在尝试使用 lodash 修改一组对象,并且有点挣扎。 I would like to take the array below and change the keys in the objects.
我想获取下面的数组并更改对象中的键。
Here is my source 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"
}
]
},
...
]
I would like this to result in:我希望这导致:
[
{
"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"
}
]
},
...
]
Note that the first two keys are renamed.请注意,前两个键已重命名。 I know I can use
_.mapKeys
to modify the keys, however I'm not sure how to iterate the array in the best way to do this.我知道我可以使用
_.mapKeys
来修改键,但是我不确定如何以最好的方式迭代数组来做到这一点。
Any suggestions would be much appreciated.任何建议将不胜感激。
Iterate using Array#map (or lodash's _.map()
), and use Object#assign (or _.assign()
) to generate a new object with the change key.使用Array#map (或 lodash 的
_.map()
)进行迭代,并使用Object#assign (或_.assign()
)生成具有更改键的新对象。
Assign will meld an object with new keys with the respective values from the original object, and the original object without the keys you want to replace using _.omit()
.分配会将具有新键的对象与来自原始对象的相应值和没有要使用
_.omit()
替换的键的原始对象_.omit()
。
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>
Another option is to use _.mapKeys()
to change the key names:另一种选择是使用
_.mapKeys()
更改键名:
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 keys = { id: 'value', name: 'title' }; var result = data.map(function(o) { return _.mapKeys(o, function(v, k) { return k in keys ? keys[k] : k; }); }); console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
I prefer not to change the original data so this is what I would do:我不想更改原始数据,所以这就是我要做的:
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 );
You can use _.map
and create a new object, change the keys based on the condition and return the new object.您可以使用
_.map
并创建一个新对象,根据条件更改键并返回新对象。
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') { newObj.value = currObj[key]; } 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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.