Javascript 删除具有Delete:true属性的数组的所有元素
大家好。 我有一个地图对象数组。是这样的,Javascript 删除具有Delete:true属性的数组的所有元素,javascript,arrays,recursion,Javascript,Arrays,Recursion,大家好。 我有一个地图对象数组。是这样的, [ { "link": "./1.css", "url": "http://opdetect.com/x/1.css", "css": "css only gets text", "parentCSS": -1, "childCSSs": [ { "link": "https://stackpath.boots
[
{
"link": "./1.css",
"url": "http://opdetect.com/x/1.css",
"css": "css only gets text",
"parentCSS": -1,
"childCSSs": [
{
"link": "https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css",
"url": "https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css",
"css": "css only gets text",
"parentCSS": "http://opdetect.com/x/1.css",
"childCSSs": [],
"delete": false
},
{
"link": "http://opdetect.com/x/1-2.css",
"url": "http://opdetect.com/x/1-2.css",
"css": "css only gets text",
"parentCSS": "http://opdetect.com/x/1.css",
"childCSSs": [
{
"link": "https://meyerweb.com/eric/tools/css/reset/reset200802.css",
"url": "https://meyerweb.com/eric/tools/css/reset/reset200802.css",
"css": "css only gets text",
"parentCSS": "http://opdetect.com/x/1-2.css",
"childCSSs": [],
"delete": false
},
{
"link": "http://opdetect.com/x/1-2-2.css",
"url": "http://opdetect.com/x/1-2-2.css",
"css": "css only gets text",
"parentCSS": "http://opdetect.com/x/1-2.css",
"childCSSs": [
{
"link": "http://opdetect.com/x/1-2-2-1.css",
"url": "http://opdetect.com/x/1-2-2-1.css",
"css": "css only gets text",
"parentCSS": "http://opdetect.com/x/1-2-2.css",
"childCSSs": [],
"delete": false
}
],
"delete": false
}
],
"delete": false
}
],
"delete": false
},
{
"link": "https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css",
"url": "https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css",
"css": "css only gets text",
"parentCSS": -1,
"childCSSs": [],
"delete": true
},
{
"link": "http://opdetect.com/x/1-2.css",
"url": "http://opdetect.com/x/1-2.css",
"css": "css only gets text",
"parentCSS": -1,
"childCSSs": [
{
"link": "https://meyerweb.com/eric/tools/css/reset/reset200802.css",
"url":"https://meyerweb.com/eric/tools/css/reset/reset200802.css",
"css": "css only gets text",
"parentCSS": "http://opdetect.com/x/1-2.css",
"childCSSs": [],
"delete": false
},
{
"link": "http://opdetect.com/x/1-2-2.css",
"url": "http://opdetect.com/x/1-2-2.css",
"css": "css only gets text",
"parentCSS": "http://opdetect.com/x/1-2.css",
"childCSSs": [
{
"link": "http://opdetect.com/x/1-2-2-1.css",
"url": "http://opdetect.com/x/1-2-2-1.css",
"css": "css only gets text",
"parentCSS": "http://opdetect.com/x/1-2-2.css",
"childCSSs": [],
"delete": false
}
],
"delete": false
}
],
"delete": true
},
{
"link": "https://meyerweb.com/eric/tools/css/reset/reset200802.css",
"url": "https://meyerweb.com/eric/tools/css/reset/reset200802.css",
"css": "css only gets text",
"parentCSS": -1,
"childCSSs": [],
"delete": true
},
{
"link": "http://opdetect.com/x/1-2-2.css",
"url": "http://opdetect.com/x/1-2-2.css",
"css": "css only gets text",
"parentCSS": -1,
"childCSSs": [
{
"link": "http://opdetect.com/x/1-2-2-1.css",
"url": "http://opdetect.com/x/1-2-2-1.css",
"css": "css only gets text",
"parentCSS": "http://opdetect.com/x/1-2-2.css",
"childCSSs": [],
"delete": false
}
],
"delete": true
},
{
"link": "http://opdetect.com/x/1-2-2-1.css",
"url": "http://opdetect.com/x/1-2-2-1.css",
"css": "css only gets text",
"parentCSS": -1,
"childCSSs": [],
"delete": true
}
]
我想删除所有具有delete:true
及其childCSS:[…]
数组对象的元素。我该怎么做?我试着这样做
links.forEach((link, index) => {
postTraverse(link, links, index);
});
const postTraverse = (obj, links, index) => {
if(!obj.delete) {
if(obj.hasOwnProperty('childCSSs')) {
if(obj.childCSSs.length > 0) {
obj.childCSSs.forEach((childObj, childIndex) => {
return postTraverse(childObj, links, childIndex);
});
}
}
} else {
if(obj.hasOwnProperty('childCSSs')) {
if(obj.parentCSS == -1) {
links.splice(index, 1);
} else {
obj.childCSSs.splice(index, 1);
}
} else {
links.splice(index, 1);
}
}
};
此解决问题的方法跳过了after
array.splice(index,1)
的某些元素,因此数组的长度减少1,而array.forEach((link,index)=>{…})的索引减少。
此语句不会减少。问题就在这里,但如果有更好的方法来解决这个问题,它会非常有用!谢谢 如果要将项目保留在数组中,请尝试使用过滤项目的子属性的.filter
:
const doFilter=arr=>arr.filter((项)=>{
如果(item.delete)返回false;
item.childcss=doFilter(item.childcss);
返回true;
});
常量输入=[{“链接”:“/1.css”,“url”:”http://opdetect.com/x/1.css,“css”:“css仅获取文本”,“parentCSS”:-1,“childcss”:[{“link”:”https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css,“url”:https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css,“css”:“css仅获取文本”,“父css”:"http://opdetect.com/x/1.css,“childCSSs”:[],“delete”:!1},{“link”:http://opdetect.com/x/1-2.css,“url”:http://opdetect.com/x/1-2.css,“css”:“css仅获取文本”,“父css”:http://opdetect.com/x/1.css,“childcss”:[{“link”:https://meyerweb.com/eric/tools/css/reset/reset200802.css,“url”:https://meyerweb.com/eric/tools/css/reset/reset200802.css,“css”:“css仅获取文本”,“父css”:http://opdetect.com/x/1-2.css,“childCSSs”:[],“delete”:!1},{“link”:http://opdetect.com/x/1-2-2.css,“url”:http://opdetect.com/x/1-2-2.css,“css”:“css仅获取文本”,“父css”:http://opdetect.com/x/1-2.css,“childcss”:[{“link”:http://opdetect.com/x/1-2-2-1.css,“url”:http://opdetect.com/x/1-2-2-1.css,“css”:“css仅获取文本”,“父css”:http://opdetect.com/x/1-2-2.css“,“childCSSs:[],“delete:!1}],“delete:!1}],“delete:!1}],“delete:!1},{”link:”https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css,“url”:https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css,“css”:“css仅获取文本”,“parentCSS”:-1,“childcss”:[],“delete”:!0},{“link”:http://opdetect.com/x/1-2.css,“url”:http://opdetect.com/x/1-2.css,“css”:“css仅获取文本”,“parentCSS”:-1,“childcss”:[{“link”:”https://meyerweb.com/eric/tools/css/reset/reset200802.css“,”url":"https://meyerweb.com/eric/tools/css/reset/reset200802.css,“css”:“css仅获取文本”,“父css”:http://opdetect.com/x/1-2.css,“childCSSs”:[],“delete”:!1},{“link”:http://opdetect.com/x/1-2-2.css,“url”:http://opdetect.com/x/1-2-2.css,“css”:“css仅获取文本”,“父css”:http://opdetect.com/x/1-2.css“,“ChildCSS”:[{”链接]:"http://opdetect.com/x/1-2-2-1.css,“url”:http://opdetect.com/x/1-2-2-1.css,“css”:“css仅获取文本”,“父css”:http://opdetect.com/x/1-2-2.css“,“childCSSs”:[],“delete”:!1}],“delete”:!1}],“delete”:!0},{“link”:”https://meyerweb.com/eric/tools/css/reset/reset200802.css,“url”:https://meyerweb.com/eric/tools/css/reset/reset200802.css,“css”:css只获取文本,“parentCSS:-1”,“childCSSs:[],“delete:!0},{“link:”http://opdetect.com/x/1-2-2.css,“url”:http://opdetect.com/x/1-2-2.css,“css”:“css仅获取文本”,“parentCSS”:-1,“childcss”:[{“link”:”http://opdetect.com/x/1-2-2-1.css,“url”:http://opdetect.com/x/1-2-2-1.css,“css”:“css仅获取文本”,“父css”:http://opdetect.com/x/1-2-2.css“,“childCSSs”:[],“delete”:!1}],“delete”:!0},{“link”:”http://opdetect.com/x/1-2-2-1.css,“url”:http://opdetect.com/x/1-2-2-1.css,“css”:“css仅获取文本”,“parentCSS”:-1,“childCSSs”:[],“delete”:!0}]
console.log(doFilter(input));
Man!你是个笑话吗?这很好!非常感谢,我为这个问题工作了2天,但你用5行代码做到了:)祝你生活愉快!