假设我有以下对象:
var my_obj = {
x: 0,
y: [Object]
}
每次调用函数recurse_object
时,我都会向my_obj
添加另一个元素,并创建一个递归对象:
function recurse_object(my_obj) {
if ("top" in my_obj) {
var x = my_obj;
my_obj = { top: x };
} else {
// missing test case.
}
return my_obj;
}
以便在第一次通话后my_obj
看起来像:
var my_obj = {
top: {
x: 0,
y: [Object]
}
}
对recurse_object
的第二次调用将my_obj
看起来像:
var my_obj = {
top: {
top: {
x: 0,
y1: [Object1]
},
x: 1,
y2: [Object2]
}
}
x
中的y
和my_obj
的值会发生变化。可以添加新属性y2
。因此,我将获取当前my_obj
并将其放入top
,并将新元素复制到"new"
my_obj
。
我怎样才能在JS中实现这一目标?
答案 0 :(得分:1)
你的功能似乎有点奇怪。如果我核心地理解你的问题,答案可能是这样的
function recurse_object(obj) {
var key='top';
if (obj.hasOwnProperty(key)) {
//here we change the y
var keys = Object.keys(obj.top);
var count='';
var currentCount='';
//go through all keys to find y because we don't know exact name
for(var k in keys){
if(k.indexOf('y')==0){
currentCount=k.substring(1);
if(currentCount!='')
count=parseInt(currentCount)+1;
else
count=1;
}
}
var x=obj;
obj['y'+count]=obj.['y'+currentCount];
delete obj.['y'+currentCount];
obj.top=x;
}
else{
obj.top=obj;
}
}