[英]Modify Keys in Array with Lodash
我正在尝试使用 lodash 修改一组对象,并且有点挣扎。 我想获取下面的数组并更改对象中的键。
这是我的源数组:
[
{
"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"
}
]
},
...
]
我希望这导致:
[
{
"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"
}
]
},
...
]
请注意,前两个键已重命名。 我知道我可以使用_.mapKeys
来修改键,但是我不确定如何以最好的方式迭代数组来做到这一点。
任何建议将不胜感激。
使用Array#map (或 lodash 的_.map()
)进行迭代,并使用Object#assign (或_.assign()
)生成具有更改键的新对象。
分配会将具有新键的对象与来自原始对象的相应值和没有要使用_.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>
另一种选择是使用_.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>
我不想更改原始数据,所以这就是我要做的:
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 );
您可以使用_.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.