javascript - 如何使用 jQuery.map 递归修改嵌套对象

标签 javascript jquery recursion

如何使用 jQuery.map(或 vanilla JS)递归修改嵌套对象?

// Original Object
var data = [{
    name: 'Parent',
    children: [{
        name: 'Child',
        children: [{
            name: 'ChildChild'
        }]
    }]
}];

// Resulting Object
var data = [{
    name: 'Parent',
    text: 'Parent',
    children: [{
        name: 'Child',
        text: 'Child',
        children: [{
            name: 'ChildChild',
            text: 'ChildChild'
        }]
    }]
}];

我目前在顶层使用 jQuery.map 这样做,但不知道如何递归实现。

$.map(data, function(obj){
    return $.extend(obj, {text: obj.name});
});

https://jsfiddle.net/minlare/0p0zb8vw/

最佳答案

不要使用 map() 修改数组;它旨在创建数组的子集。要修改数组,请使用 each() 或任何其他标准循环机制。

考虑到这一点,您可以在这种情况下使用 $.each() 来递归遍历数组每一层的对象。试试这个:

function setText(arr) {
    $.each(arr, function(i, obj) {
        obj.text = obj.name;
        if (obj.children && obj.children.length) {
            setText(obj.children);
        }
    });
}
setText(data);

Updated fiddle

关于javascript - 如何使用 jQuery.map 递归修改嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35872726/

相关文章:

javascript - 如何加载https ://websites on click of chrome extension

asp.net - 如何从代码隐藏中确定 ASP.NET 生成的 ID?

python - 递归使用带有 python 3.5 的请求时出错(GooglePlaces API)

图像上的 Javascript 动画

javascript - Href 哈希 ID 滚动到 Div 但它会跳转并跳过某些部分

C 段错误 : memory altered between functions strcmp

javascript - 递归求和对象中的子属性

javascript - 在 then block 中使用类函数

javascript - JQuery:ajax调用完成后如何回调每个循环?

javascript - 在 Javascript 中返回相反值