我正在尝试向javascript嵌套数组对象添加属性...
我需要遍历树获取text属性的值并将其转换为小写并将此数据添加为新属性(lowerText)
旧数组:
var oldObject= [{
text: "Subgroup3",
items: [{
text: "subgroup5",
items: [{
text: "subgroup6",
items: [{
text: "subgroup7",
items: [{
text: "subgroup8"
}]
}]
}]
}]
}]
我需要新的数组对象如下:
var newObject= [{
text: "Subgroup3",
lowerText:"subgroup3",
items: [{
text: "subgroup5",
lowerText:"subgroup5",
items: [{
text: "subgroup6",
lowerText:"subgroup6",
items: [{
text: "subgroup7",
lowerText:"subgroup7",
items: [{
text: "subgroup8",
lowerText:"subgroup8",
}]
}]
}]
}]
}]
这是我尝试过的,循环遍历每个对象并将项目(数组)传递给递归函数来设置属性,但它似乎没有正常工作。不确定我做错了什么,有人可以帮我解释一下这段代码吗?
for (var i = 0; i < data.length; i++) {
data[i].lowerText=data[i].text.toLowerCase();
loopTree(data[i].items);
}
function loopTree(node){
if (node) {
$.each(node, function (idx, item) {
item.lowerText=item.text.toLowerCase();
if(item.items){
loopTree(item.items)
}
});
}
}
编辑:下面的代码完成了这项工作。
for (var i = 0; i < data.length; i++) {
if(data[i]){
process( data[i]);
}
}
function process(val) {
val.lowerText = val.text.toLowerCase();
if(val.items){
for(var i = 0, len = val.items.length; i < len; i++) {
process(val.items[i]);
}
}
}
答案 0 :(得分:4)
如果您不想克隆对象并只修改现有对象,请尝试以下操作:
function process(val) {
val.lowerText = val.text.toLowerCase();
for(var i = 0, len = val.items.length; i < len; i++) {
process(val.items[i]);
}
}
process(obj);
答案 1 :(得分:0)
如果要保留旧数组中的值,只需将新对象推送到旧数组:
oldObject.push(newObject[0]);
如果你只需要替换整个数组,那就是琐碎的,
oldObject = newObject;