我有一个嵌套对象,如下所示。一些对象中的content属性为空。我需要遍历所有对象,如果它具有空的 content 属性,我需要为其提供一个像 Default value 这样的值。
var data = [{
title: "Admin Services",
content: "admin",
links: [{
title: "Report",
content: "",
links: [{
title: "Notifications",
content: "Notify",
links: [{
title: "Send",
content: "",
links: [{
title: "read",
content: "",
links: [],
}]
}]
}]
}, {
title: "Script",
content: "script",
links: [{
"title": "Execute",
content: "",
links: []
}]
}, {
title: "Process",
content: "",
links: []
}]
}];
function checkEmptyContent(data){
data.forEach((item)=>{
if(item.links.length > 0){
checkEmptyContent(item.links)
}
if(item.content === ""){
item.content = "Default Content";
}
});
}
checkEmptyContent(data);
console.log('data',data);
我得到如下输出
[
{
"title": "Admin Services",
"content": "admin",
"links": [
{
"title": "Report",
"content": "Default Content",
"links": [
{
"title": "Notifications",
"content": "Notify",
"links": [
{
"title": "Send",
"content": "Default Content",
"links": [
{
"title": "read",
"content": "Default Content",
"links": []
}
]
}
]
}
]
},
{
"title": "Script",
"content": "script",
"links": [
{
"title": "Execute",
"content": "Default Content",
"links": []
}
]
},
{
"title": "Process",
"content": "Default Content",
"links": []
}
]
}
]
最终的要求是,不仅要添加默认文本,还要添加一个如下所示的计数器
[
{
"title": "Admin Services",
"content": "admin",
"links": [
{
"title": "Report",
"content": "Default Content (0)",
"links": [
{
"title": "Notifications",
"content": "Notify",
"links": [
{
"title": "Send",
"content": "Default Content (1)",
"links": [
{
"title": "read",
"content": "Default Content (2)",
"links": []
}
]
}
]
}
]
},
{
"title": "Script",
"content": "script",
"links": [
{
"title": "Execute",
"content": "Default Content (0)",
"links": []
}
]
},
{
"title": "Process",
"content": "Default Content (0)",
"links": []
}
]
}
]
对于数组中的每个对象,计数器应从0开始
答案 0 :(得分:2)
您可以为此使用递归,方法是对每个嵌套数组重复使用addDefault()
函数。通过遍历数组中的每个对象,可以检查它是否具有content
,如果没有,可以向其中添加“默认内容(0)”字符串:
const data = [{title:"Admin Services",content:"admin",links:[{title:"Report",content:"",links:[{title:"Notifications",content:"Notify",links:[{title:"Send",content:"",links:[{title:"read",content:"",links:[]}]}]}]},{title:"Script",content:"script",links:[{title:"Execute",content:"",links:[]}]},{title:"Process",content:"",links:[]}]}];
const addDefault = (arr, level=0) => {
arr.forEach(obj => {
obj.content = obj.content || `Default Content (${level++})`;
addDefault(obj.links, level);
level = 0;
});
}
addDefault(data);
console.log(data);
答案 1 :(得分:0)
我已经修改了您的逻辑,请检查一下,
function checkEmptyContent(data){
data.forEach((item)=>{
if(!item.content.length){
item.content = "Default Content";
}
if(item.links.length > 0){
checkEmptyContent(item.links)
}
});
}
checkEmptyContent(data);
console.log('data',data);