我有一个对象,我希望其中一个值成为父键的名称:
{
name: 'Jon',
address: {
city: 'Vienna',
parent: <How can I dynamically set this to 'address'>
}
}
答案 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);