基于此帖子How can I wrap the value of json with curly braces?
如何在嵌套结构中附加“值”?
{名称:“ Bill”,姓氏:“ Smith”,孩子:{ 名称:“ Adam”, 选项:[{ 选项1” }, {选项:“ 2” }] }
结果应该是
{ name: { value:'Bill'}, lastname: { value:'Smith'},
child: {
name: { value:'Adam'},
options: [{
option: { value:'1'}
},
{ option: { value:'2'}
}]
}
...
}
答案 0 :(得分:0)
递归运行它,并为数组和对象添加特殊处理。
const input = { name: 'Bill', lastname: 'Smith', child: { name: 'Adam', options: [{ option: "1" }, { option: "2" }] } };
const transform = (input) => Object.fromEntries(
Object.entries(input).map(([key, value]) => {
// If it is an array, transform each object in it
if(Array.isArray(value)) {
return ([key, value.map(el => transform(el))]);
}
// If it is an object, transform its value
else if(typeof value === 'object' && value !== null) {
return [key, transform(value)];
}
// If it is a normal value, add the {value: } part
else {
return ([key, { value }]);
}
})
);
console.log(transform(input));
答案 1 :(得分:0)
您需要为对象中的每个属性调用的递归函数。
var arr = { name: 'Bill', lastname: 'Smith', child: { name: 'Adam', options: [{ option: "1" }, { option: "2" }] } };
function translate(obj) {
for (var property in obj){
if (typeof obj[property] == "object") {
obj[property] = translate(obj[property]);
}
else{
obj[property] = {value: obj[property]}
}
}
return obj;
}
console.log(translate(arr));
答案 2 :(得分:0)
您可以使用lodash的_.transform()
创建一个递归函数,该函数迭代对象和数组,并使用value
包装其他类型的属性:
const fn = obj => _.transform(obj, (acc, value, k) => {
acc[k] = _.isObject(value) ? fn(value): { value }
})
const data = { name: 'Bill', lastname: 'Smith', child: { name: 'Adam', options: [{ option: "1" }, { option: "2" }] } }
const result = fn(data)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>