Javascript 遍历递归结构并将数据添加到倒数第二个节点
我有一个目标Javascript 遍历递归结构并将数据添加到倒数第二个节点,javascript,Javascript,我有一个目标 x = { "y": 55.11, "color": "#4572A7", "level": 0, "drilldown": { "name": "MSIE versions", "level": 1, "color": "#4572A7", "categ
x = {
"y": 55.11,
"color": "#4572A7",
"level": 0,
"drilldown": {
"name": "MSIE versions",
"level": 1,
"color": "#4572A7",
"categories": ["MSIE 8.0", "MSIE 6.0", "MSIE 7.0", "MSIE 9.0"],
"data": [
{
"y": 33.06,
"color": "#4572A7",
"level": 1,
"drilldown": {
"name": "drilldown next level",
"level": 2,
"color": "#4572A7",
"categories": ["a", "b", "c"],
"data": [23,54,47]
}
},
]
}
}
注意,这实际上可以深入到任何深度,因为我正在向对象添加新属性,但其格式类似于
x['drilldown] = {}
x.drilldown['data] =[]
....and so on....
因此,假设我有以下对象结构:
x {
drilldown {
data [
drilldown {
data [1,2,3]
}
]
}
}
.....................
我需要转到对象“x”的最后第二个“数据”元素并推送新值。因此,根据我上面的例子,应该是这样的:
x.drilldown.data.push(10);
总之,我需要在对象“x”中找到最后一个数据属性,然后在其中推送值
x、 倒数第二个数据数组.push10
我该怎么做
==================================================================================
[添加的解决方案]
我添加了下面的代码,效果很好。我希望这是正确的做法:
var data = [10,11,12];
var datatemp = x.drilldown;
var datatempvar = {};
for (;typeof datatemp != 'undefined';)
{
datatempvar = datatemp;
datatemp = datatemp.drilldown;
}
for(it=0;it<data.length; it++)
datatempvar.data.push(data[it]);
谢谢大家-这个论坛帮了我很大的忙。如果一个数据数组包含多个值,特别是一些具有深入分析和一些普通值的对象,该怎么办
在每种情况下,您都必须设置一个循环,该循环测试是否还有两个级别的进一步深入,并对每个级别执行此操作。当它中断时,当前级别是您想要添加元素的级别。从问题中,我不确定您想要的是最后一项还是第二项 但这里有一个例子,它将第二个和最后一个项目分离开来。 然后在最后一项上推送一个值
<html>
<head>
<script type="text/javascript">
x = {
"drilldown": {
"data":
{
"drilldown": {
"data": [23,54,47]
}
}
}
}
function pushValue(dataItem, value) {
var parent = null;
var child = dataItem;
while(child.drilldown != null) {
parent = child;
child = child.drilldown.data;
}
// Child is now the last item in the structure
// and parent is the second last item
child.push(value);
}
function performTest() {
pushValue(x, 36);
}
</script>
</head>
<body>
<button onclick="performTest()">Run</button>
</body>
</html>
它到底对jQuery有什么影响?我如何遍历一个对象?有什么方法吗?jQuery遍历DOM甚至XML,而不是对象。。。也许你可以找到一个插件来实现它,尽管我对此表示怀疑。所谓倒数第二个数据数组,你是指x.drilldown.data[secondtolastedex].drilldown.data?实际上是“x”中的倒数第二个对象及其数据元素