【问题标题】:How can I wrap the value of json with curly braces including child array?如何用花括号(包括子数组)包装 json 的值?
【发布时间】:2023-03-08 21:40:01
【问题描述】:

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

在嵌套结构中追加“值”怎么样?

{ 姓名:“比尔”,姓:“史密斯”,孩子:{ 名称:'亚当', 选项: [{ 选项1” }, {选项:“2” }] } }

结果应该是

{ name: { value:'Bill'}, lastname: { value:'Smith'},
  child: {
        name: { value:'Adam'},
        options: [{
                  option: { value:'1'}
                 },
                 { option: { value:'2'}
                 }]
        }
        ... 
}

【问题讨论】:

  • 这与您之前提出的问题几乎相同。您是否尝试过在那里应用答案以获得您想要的结果?你遇到了什么问题?

标签: javascript typescript lodash


【解决方案1】:

您可以使用 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>

【讨论】:

    【解决方案2】:

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

    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));

    【讨论】:

      【解决方案3】:

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

      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));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-12
        • 2021-12-22
        • 1970-01-01
        • 1970-01-01
        • 2015-01-14
        相关资源
        最近更新 更多