首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何用花括号(包括子数组)包装json的值?

如何用花括号(包括子数组)包装json的值?
EN

Stack Overflow用户
提问于 2019-08-01 02:49:29
回答 3查看 752关注 0票数 1

基于这篇文章How can I wrap the value of json with curly braces?

在嵌套结构中附加"value“如何?

{名称:'Bill',姓氏:'Smith',子:{ name:'Adam',选项:{选项:"1“},{选项:"2”}}

结果应该是

代码语言:javascript
运行
AI代码解释
复制
{ name: { value:'Bill'}, lastname: { value:'Smith'},
  child: {
        name: { value:'Adam'},
        options: [{
                  option: { value:'1'}
                 },
                 { option: { value:'2'}
                 }]
        }
        ... 
}
EN

回答 3

Stack Overflow用户

发布于 2019-08-01 03:07:03

递归地运行它,并添加对数组和对象的特殊处理。

代码语言:javascript
运行
AI代码解释
复制
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));

票数 0
EN

Stack Overflow用户

发布于 2019-08-01 03:08:19

您需要为对象中的每个属性调用一个递归函数。

代码语言:javascript
运行
AI代码解释
复制
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));

票数 0
EN

Stack Overflow用户

发布于 2019-08-01 08:35:51

可以使用lodash的_.transform()创建递归函数,该函数迭代对象和数组,并使用value包装其他类型的属性

代码语言:javascript
运行
AI代码解释
复制
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)
代码语言:javascript
运行
AI代码解释
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57307342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档