我如何通过对象的嵌套数组迭代和删除一些属性
How can i iterate through nested arrays of objects and remove some attribute
我有一个JavaScript对象数组,每个对象都可以有子对象,子对象的类型与父对象的类型相同,子对象可以有多个子对象。我想遍历所有节点并改变一些值。
[
{
"text": "Auto",
"icon": "/libs/jstree/folder.png",
"state": {
"opened": true,
"selected": true
}
},
{
"text": "BookMark1",
"icon": "/libs/jstree/folder.png",
"state": {
"opened": true
},
"children": [
{
"text": "BookMark2",
"icon": "/libs/jstree/folder.png",
"state": {
"opened": true
}
},
{
"text": "BookMark3",
"icon": "/libs/jstree/folder.png",
"state": {
"opened": true
}
},
{
"text": "BookMark4",
"icon": "/libs/jstree/folder.png",
"state": {
"opened": true
}
},
{
"text": "BookMark5",
"icon": "/libs/jstree/folder.png",
"state": {
"opened": true
}
},
{
"text": "BookMark6",
"icon": "/libs/jstree/folder.png",
"state": {
"opened": true
},
"children": [
{
"text": "BookMark2",
"icon": "/libs/jstree/folder.png",
"state": {
"opened": true
}
},
{
"text": "BookMark3",
"icon": "/libs/jstree/folder.png",
"state": {
"opened": true
}
}
]
},
{
"text": "BookMark7",
"icon": "/libs/jstree/folder.png",
"state": {
"opened": true
}
}
]
}
]
在上面的对象中,我想遍历所有节点并删除"state"属性。我怎样才能做到这一点呢?
这是递归的方法,它检查内部和外部。
https://jsfiddle.net/8ku7wohd/2/
function removeState(a){
if (a.hasOwnProperty('state')) delete a['state'];
if (a instanceof Array) a.forEach(removeState);
else if (a instanceof Object) for (var k in a) removeState(a[k]);
}
试试这个:
function removeKeys(arr, key) {
arr.forEach(function (element, index) {
delete element[key];
if (element.children !== undefined) removeKeys(element.children, key);
});
}
removeKeys(json, "state");
小提琴:http://jsfiddle.net/9scd3qb3/
您需要在对象上使用递归函数进行迭代。我在这里为您创建了一个遍历嵌套对象的示例和最常见的方法:
function walk(item){
for(index in item){
console.log(item[index]);
if(typeof item[index] == "object"){
walk(item[index]);
}
}
}
使用这个函数作为基础,你可以扩展它的功能,做任何你真正需要的。如果你使用的是JQuery,他们提供的功能.each(function(index, item){})
,做同样的。
如果我可以在其他地方提供帮助,请在这里更新您的帖子或评论。
您可以使用JSON.stringify
与replacer
参数这样做:
JSON.parse(JSON.stringify(object, ['text', 'icon', 'children']))
数组给出了一个"白名单"属性列表,这些属性将包含在结果中。所有其他属性(包括state
)被忽略/删除
试一试:
jQuery.each(myJSONObject, function(i, val) {
delete val.state;
});
小提琴更新:
另一个需要临时变量的解决方案。
var tempJsonObject = [];
jQuery.each(myJSONObject, function(i, val) {
delete val.state;
tempJsonObject[i] = val;
});
myJSONObject = tempJsonObject;
小提琴更新:
包括删除子对象的state
属性。
removeProperty(myJSONObject, "state");
function removeProperty(myJSONObject, prop) {
jQuery.each(myJSONObject, function(i, val) {
delete val.state;
if(val.hasOwnProperty("children")) {
removeProperty(val.children, "state");
}
});
}
小提琴
var jsonObj = JSON.parse(text);
for (var i in jsonObj) {
console.log(jsonObj[i].text);
jsonObj[i].text = "some text"
var innerJson = jsonObj[i].children
for (var j in innerJson) {
console.log(innerJson[j].text);
innerJson[j].text = "some other text for all inner"
}
};
相关文章:
- 在不知道深度或父属性的情况下从对象中删除属性
- 如何从对象中删除属性
- 使用jQuery添加和删除属性
- 为什么没有从数组中存在的对象中删除属性
- 删除属性后刷新DOM,而不象chrome那样刷新页面
- Jquery 在当前之前从元素中删除属性
- 在窗口调整大小时删除属性
- 如何从使用 jquery 添加的项中删除属性
- 从 JavaScript 中的 XAML 元素中删除属性
- 主干模型.未设置不删除属性
- 无法在单击时添加/删除属性
- 从主干.js模型中删除属性
- 如果选中复选框,请删除属性
- jQuery单击功能可从元素中删除属性并在单独单击时恢复属性
- 如果找到特定类,如何添加和删除属性
- 如何使用 Javascript 从 DOM 元素中删除属性
- 从 Javascript 对象中删除属性
- 量角器未知错误,从 DOM 中删除属性
- 如何使用jquery onchange事件在HTML中添加和删除属性
- 如何从任何级别的嵌套javascript对象中删除属性