如何从子';javascript/vuejs中的s Id
所以我有这个json如何从子';javascript/vuejs中的s Id,javascript,node.js,vuejs2,Javascript,Node.js,Vuejs2,所以我有这个json { "account_owner": "", "account_type": "", "nest_uid": "17_15_1536914882_yhHDzQsDSI", "business_name": "", "sync_block": false, "validation": { "isError": false, "inputList": [], "message": "
{
"account_owner": "",
"account_type": "",
"nest_uid": "17_15_1536914882_yhHDzQsDSI",
"business_name": "",
"sync_block": false,
"validation": {
"isError": false,
"inputList": [],
"message": ""
},
"is_selected": true,
"contacts": [{
"con_title": "",
"con_fName": "",
"con_lName": "",
"con_job_title": "",
"is_selected": true,
"emails": [{
"email": "",
"type": "",
"primary": false,
"is_selected": true,
"nest_uid": "17_15_1536914882_yhHDzQsDSK",
"validation": {
"isError": false,
"inputList": [],
"message": "",
"is_selected": true
},
"checked": false
}],
"phones": [{
"phone": "",
"type": "",
"primary": false,
"is_selected": true,
"nest_uid": "17_15_1536914882_uHN38SxJ3s",
"validation": {
"isError": false,
"inputList": [],
"is_selected": true,
"message": ""
},
"checked": false
}],
"nest_uid": "17_15_1536914882_hwzB7dIn9v",
"checked": false
},
{
"con_title": "",
"con_fName": "",
"con_lName": "",
"con_job_title": "",
"is_selected": true,
"emails": [{
"email": "",
"type": "",
"primary": false,
"is_selected": true,
"nest_uid": "17_15_1536914882_yhHDzQsDSx",
"validation": {
"isError": false,
"is_selected": true,
"inputList": [],
"message": ""
},
"checked": false
}],
"phones": [{
"phone": "",
"type": "",
"primary": false,
"is_selected": true,
"nest_uid": "17_15_1536914882_uHN38SxJ3Y",
"validation": {
"isError": false,
"is_selected": true,
"inputList": [],
"message": ""
},
"checked": false
}],
"nest_uid": "17_15_1536914882_hwzB7dIn9x",
"checked": false
}
]
}
您可以看到,每个级别上都有两个属性
nest\u uid
已被选中
嵌套uid
,因此我需要将所有都标记为false,除了选中的一个及其父元素
比如说
如果nest_id='17_15_1536914882_yhHDzQsDSK'
输出
{
"account_owner": "",
"account_type": "",
"nest_uid": "17_15_1536914882_yhHDzQsDSI",
"business_name": "",
"sync_block": false,
"validation": {
"isError": false,
"inputList": [],
"message": ""
},
"is_selected": true,//here
"contacts": [{
"con_title": "",
"con_fName": "",
"con_lName": "",
"con_job_title": "",
"is_selected": true, //here
"emails": [{
"email": "",
"type": "",
"primary": false,
"is_selected": true,
"nest_uid": "17_15_1536914882_yhHDzQsDSK", //here
"validation": {
"isError": false,
"inputList": [],
"message": "",
"is_selected": true
},
"checked": false
}],
"phones": [{
"phone": "",
"type": "",
"primary": false,
"is_selected": false,
"nest_uid": "17_15_1536914882_uHN38SxJ3s",
"validation": {
"isError": false,
"inputList": [],
"is_selected": true,
"message": ""
},
"checked": false
}],
"nest_uid": "17_15_1536914882_hwzB7dIn9v",
"checked": false
},
{
"con_title": "",
"con_fName": "",
"con_lName": "",
"con_job_title": "",
"is_selected": false,
"emails": [{
"email": "",
"type": "",
"primary": false,
"is_selected": false,
"nest_uid": "17_15_1536914882_yhHDzQsDSx",
"validation": {
"isError": false,
"is_selected": false,
"inputList": [],
"message": ""
},
"checked": false
}],
"phones": [{
"phone": "",
"type": "",
"primary": false,
"is_selected": false,
"nest_uid": "17_15_1536914882_uHN38SxJ3Y",
"validation": {
"isError": false,
"is_selected": false,
"inputList": [],
"message": ""
},
"checked": false
}],
"nest_uid": "17_15_1536914882_hwzB7dIn9x",
"checked": false
}
]
}
递归确实是这里的答案。这样的东西应该有用,即使它不是最漂亮的:
function selectInJSON(uid, current) {
current.is_selected = current.nest_uid === uid
Object.values(current).forEach((child) => {
if (Array.isArray(child)) {
child.forEach((item) => {
selectInJSON(uid, item)
if (item.is_selected) current.is_selected = true
})
}
else if (Object(child) === child) {
selectInJSON(uid, child)
if (child.is_selected) current.is_selected = true
}
})
}
递归确实是这里的答案。这样的东西应该有用,即使它不是最漂亮的:
function selectInJSON(uid, current) {
current.is_selected = current.nest_uid === uid
Object.values(current).forEach((child) => {
if (Array.isArray(child)) {
child.forEach((item) => {
selectInJSON(uid, item)
if (item.is_selected) current.is_selected = true
})
}
else if (Object(child) === child) {
selectInJSON(uid, child)
if (child.is_selected) current.is_selected = true
}
})
}
你必须采取递归的方法,不能用简单的过滤器解决。这个JSON结构是否像你在问题中发布的那样固定?@SivcanSingh是的,嵌套uid是固定的,选择的是我为了创建场景而添加的hwat,所以基本上我只想向用户显示立即树,隐藏所有其他内容你必须采用递归方法,不能用简单的过滤器解决。这个JSON结构是否如你在问题中所发布的那样固定?@SivcanSingh是的,嵌套uid是固定的,所选的是为了创建场景而添加的hwat,所以基本上我只想向用户显示即时树,隐藏所有其他元素该代码是否也会使所有其他元素为false?它是否会返回任何内容?它会在适当的位置修改对象。如果您想返回它,您必须使其不可变或进行深度克隆。如果它对你有用,别忘了把答案标为正确!这段代码是否也会使其他所有元素都为false?它是否会返回任何内容?它会就地修改对象。如果您想返回它,您必须使其不可变或进行深度克隆。如果它对你有用,别忘了把答案标为正确!