如何使用lodash更改深层嵌套对象中的对象键?
问题描述:
我有以下类型的对象:如何使用lodash更改深层嵌套对象中的对象键?
{
options: [
{ id: 1, value: 'a' }
],
nestedObj: {
options: [
{ id: 2, value: 'b' }
]
}
}
如何更改键“id”两个,选择数组中的第一级和嵌套的水平?我曾尝试使用lodash这个而不是一直能得到期望的结果:
{
options: [
{ newKey: 1, value: 'a'
],
nestedObj: {
options: [
{ newKey: 2, value: 'b' }
]
}
}
所以我想找到它的工作原理是lodash mapKeys但将通过深嵌套的对象迭代函数。
答
您可以使用_.transform()
递归替换键:
var obj = {
options: [{
id: 1,
value: 'a'
}],
nestedObj: {
options: [{
id: 2,
value: 'b'
}]
}
};
console.log(replaceKeysDeep(obj, {
id: 'newKey',
options: 'items'
}));
function replaceKeysDeep(obj, keysMap) { // keysMap = { oldKey1: newKey1, oldKey2: newKey2, etc...
return _.transform(obj, function(result, value, key) { // transform to a new object
var currentKey = keysMap[key] || key; // if the key is in keysMap use the replacement, if not use the original key
result[currentKey] = _.isObject(value) ? replaceKeysDeep(value, keysMap) : value; // if the key is an object run it through the inner function - replaceKeys
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.js"></script>
它可以出现在任何深度? – alex
@alex是的,具有这些键值对的对象的选项数组可以并将出现在任何深度。 –