javascript - 将具有一个属性的对象转换为父属性

标签 javascript javascript-objects

我已经从 xml 转换了 javascript 对象,这是对象的例子:

{
name: 'current name',
  attr1: 'attribute1',
  attr2: 'attribute2',
  address: {
    name: 'name1',
    value: {
      value: '12'
    },
    attr3: {
      name: 'no name',
      attr4: {
        attr4: 'attribute4'
      }
    }
  },
  price: {
    price: '500'  
  },
  in_house: {
    in_house: '2'
  }
}

我如何转换成这个:

{
name: 'current name',
  attr1: 'attr1',
  address:{
    name: 'name1',
    value: '12',
    attr3: {
      name: 'no name',
      attr4: 'attribute3'
    }
  }
  attr2: 'attr2',
  price: 500,
  in_house: 2
}

需要将所有无用的对象转化为属性,例子 { 价格 : 价格:'500' } 进入 {价格:'500'}

最佳答案

您可以对键及其值使用迭代、递归方法。

function moveUp(object, last) {
    var keys = Object.keys(object);

    if (keys.length === 1 && keys[0] in last) {
        last[keys[0]] = object[keys[0]];
        if (last[keys[0]] !== null && typeof last[keys[0]] === 'object') {
            moveUp(last[keys[0]], last);
        }
        return;
    }
    keys.forEach(function (k) {
        if (object[k] !== null && typeof object[k] === 'object') {
            moveUp(object[k], object)
        }
    });
}

var object = { name: 'current name', attr1: 'attribute1', attr2: 'attribute2', address: { name: 'name1', value: { value: '12' }, attr3: { name: 'no name', attr4: { attr4: 'attribute4' } } }, price: { price: '500' }, in_house: { in_house: '2' }, test: { test: { test: { banane: 42 } } } };

moveUp(object);

console.log(object);	
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 将具有一个属性的对象转换为父属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39804323/

相关文章:

javascript - 创建新用户后 Firebase 身份验证状态发生变化

javascript - 递归地将 JavaScript 对象拟合到特定结构

javascript - 使用正则表达式替换 javascript 中的第 N 个单词

javascript - 在 Javascript 字符串中的 url 开头和结尾插入字符

javascript - 将属性指令传递给元素指令

javascript - 查找所有 li 项的数据属性值的最大值

javascript - JavaScript 对象与不同类型值(如字符串、对象和数组)的笛卡尔积

javascript - 如何显示来自 API 调用的单个 JavaScript 对象/JSON 项

javascript - 更改输入文本中的数字格式

JavaScript - 有什么方法可以动态创建对象的新实例吗?