Javascript 重命名数组的嵌套键
我需要更改嵌套数组的值才能使用插件 我的JSON如下所示:Javascript 重命名数组的嵌套键,javascript,angularjs,Javascript,Angularjs,我需要更改嵌套数组的值才能使用插件 我的JSON如下所示: [{"Id":13,"Name":"sadas","Users":[],"Managers":[],"Departments":[{"Id":14,"Name":"hgjghjghjg","Users":[],"Managers":[],"Departments":[{"Id":16,"Name":"kjk","Users":[],"Managers":[],"Departments":[{"Id":17,"Name":"vcxv",
[{"Id":13,"Name":"sadas","Users":[],"Managers":[],"Departments":[{"Id":14,"Name":"hgjghjghjg","Users":[],"Managers":[],"Departments":[{"Id":16,"Name":"kjk","Users":[],"Managers":[],"Departments":[{"Id":17,"Name":"vcxv","Users":[],"Managers":[],"Departments":[]}]}]},{"Id":15,"Name":"p[op[","Users":[],"Managers":[],"Departments":[]}]}]
要使用angular插件,需要将每个键部门重命名为children
,并从键中删除“”
我尝试使用Json.stringify,并替换默认字符串中的like
var objToSend = JSON.stringify(response.Departments);
var str = objToSend.replace("\"Departments\":", "\"children\":");
$rootScope.tree_data = str;
但它对我来说不起作用,它只是更改数组的第一个键,而不是嵌套和返回
[{"Id":13,"Name":"sadas","Users":[],"Managers":[],"children":[{"Id":14,"Name":"hgjghjghjg","Users":[],"Managers":[],"Departments":[{"Id":16,"Name":"kjk","Users":[],"Managers":[],"Departments":[{"Id":17,"Name":"vcxv","Users":[],"Managers":[],"Departments":[]}]}]},{"Id":15,"Name":"p[op[","Users":[],"Managers":[],"Departments":[]}]}]
替换方法不起作用,因为替换只会更改第一次出现的内容。不过,你可以用正则表达式 或者(在我看来)更好的方法是使用 像这样的
function rename (obj) {
for(var prop in obj) {
if (Array.isArray(obj[prop])) {
obj[prop] = obj[prop].map(rename);
}
if (prop === 'Departments') {
obj.children = obj[prop];
delete obj[prop];
}
}
return obj;
};
var y = x.map(rename);
但是,这只会递归地检查数组。不是嵌套的对象属性。但是,从您的数据来看,它似乎只是数组
例如,对于这样的结构,这将不起作用
var data = {
"Id": 17,
"Name": "vcxv",
"Users": [],
"Managers": [],
"Departments": {
"Id": 18,
"Name": "trollol",
"Users": [],
"Managers": [],
"Departments": {}
}
};
演示小提琴:
编辑:更新,您还可以使用
Object.keys
获取数组中的对象键。不太确定这里是否有任何好处,但是超过for in
甚至可能会影响性能<代码>对象。键在函数组合和方法链接等方面更有用
但这里有一把最新的小提琴 嗨,欢迎来到StackOverflow。不幸的是,这不是一个代码编写服务,您需要自己尝试一些东西,并在遇到困难时提出特定的问题。