我需要使用“ Lodash”库将数组从一种类型重新格式化为另一种类型。
我最初有这样一个数组:
[{
"language": {
"displayName": {
"en": "English"
},
"id": 1
},
"level": {
"id": 1,
"displayName": {
"en": "Intermediate"
}
}
}, {
"language": {
"displayName": {
"en": "Russian"
},
"id": 2
},
"level": {
"id": 1
"displayName": {
"en": "Fluent"
}
}
}]
如何以这种格式转换数组:
[{
"language": 1, // it is language.id
"level": 1 // it is level.id
}, {
"language": 2, // it is language.id
"level": 2 // it is level.id
}]
答案 0 :(得分:0)
您可以像这样使用map
:
const input=[{language:{displayName:{en:"English"},id:1},level:{id:1,displayName:{en:"Intermediate"}}},{language:{displayName:{en:"Russian"},id:2},level:{id:1,displayName:{en:"Fluent"}}}];
const output = input.map(o => ({ language: o.language.id, level: o.level.id }))
console.log(output)
答案 1 :(得分:0)
您可以使用map。在地图回叫功能中,您可以访问单个对象,每个对象将具有language
和level
作为键。键id
嵌套在语言和级别键中。因此,要检索id
的值,您需要item.language.id
和item.level.id
,其中item是当前对象
let data = [{
"language": {
"displayName": {
"en": "English"
},
"id": 1
},
"level": {
"id": 1,
"displayName": {
"en": "Intermediate"
}
}
}, {
"language": {
"displayName": {
"en": "Russian"
},
"id": 2
},
"level": {
"id": 1,
"displayName": {
"en": "Fluent"
}
}
}];
let newData = data.map(function(item) {
return {
language: item.language.id,
level: item.level.id
}
});
console.log(newData)
答案 2 :(得分:0)
您可以使用Array.map()
,如已显示。但是,根据需要,Lodash
解决方案将结合使用_.map()和_.mapValues()
const input = [{"language":{"displayName":{"en":"English"},"id":1},"level":{"id":1,"displayName":{"en":"Intermediate"}}},{"language":{"displayName":{"en":"Russian"},"id":2},"level":{"id":2,"displayName":{"en":"Fluent"}}}];
let res = _.map(input, o => _.mapValues(o, "id"));
console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
答案 3 :(得分:0)
您可以使用简单的map
使用嵌套解构来提取所需的属性:
const arr = [{"language":{"displayName":{"en":"English"},"id":1},"level":{"id":1,"displayName":{"en":"Intermediate"}}},{"language":{"displayName":{"en":"Russian"},"id":2},"level":{"id":1,"displayName":{"en":"Fluent"}}}];
const res = arr.map(({ language: { id: language }, level: { id: level }}) => ({ language, level }));
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
以下是使用_.map
和_.mapValues
的Lodash版本(以避免_.values
中的_.map
更加冗长):
const arr = [{"language":{"displayName":{"en":"English"},"id":1},"level":{"id":1,"displayName":{"en":"Intermediate"}}},{"language":{"displayName":{"en":"Russian"},"id":2},"level":{"id":1,"displayName":{"en":"Fluent"}}}];
const res = _.map(arr, e => _.mapValues(e, ({ id }) => id));
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>