js获取对象中父键的名称

时间:2018-07-19 15:39:36

标签: javascript

我有一个对象,我希望其中一个值成为父键的名称:

{
   name: 'Jon',
   address: {
        city: 'Vienna',
        parent: <How can I dynamically set this to 'address'>
   }
}

3 个答案:

答案 0 :(得分:1)

好吧,我无法从您的问题中理解您是否处理了多于1级的嵌套对象,但是此代码将适用于第一级。如果您想无限级别,则需要递归进行

const obj = {
   name: 'Jon',
   address: {
        city: 'Vienna'
   }
}

for(let i in obj){
	if(typeof obj[i] === 'object'){
    	obj[i].parent = i;
    }
}
console.log(obj)

答案 1 :(得分:0)

我们可以通过创建一个递归函数来实现此目的,该递归函数使用parent属性递归更新对象和子对象内部的所有级别。 这是一个递归函数,适用于n级。

var obj = {
   name: 'Jon',
   address: {
        city: 'Vienna',
        pincode :{
          val : 110,
          Area : {
            val : "xyz"
          }
        },
   },
   designation : {
      post : "Manager",
      salary : {
         value : "100"
      }
   }
}

function updateParent(obj,parent){
  if(parent)
    obj.parent = parent;
  for(var key in obj){
    if(obj[key].constructor.toString().indexOf("Object") >= 0){
        updateParent(obj[key],key);
    }
  }
}
updateParent(obj);
console.log(obj);

答案 2 :(得分:0)

我采取的方法是使对象可迭代,然后使用for...of搜索所需的子属性并将其值更改为其父对象的名称:

var data = {
  name: 'Jon',
  address: {
    city: 'Vienna',
    parent: '<How can I dynamically set this to \'address\'>'
  }
};

data[Symbol.iterator] = function() {
  var i = 0;
  var keys = Object.keys(this);
  return {
    next: function() {
      var value = keys[i],
        done = false;
      i++;

      if (i > keys.length) {
        done = true;
      }

      return {
        value,
        done
      }
    }
  }
}

function setChildProperty(parentPropertyName, childPropertyName) {
  for (prop of data) {
    if (prop == parentPropertyName) {
      data[prop][childPropertyName] = prop;
    }
  }
}

//Before
console.log(data);
setChildProperty("address", "parent")
//After
console.log(data);