[英]How to change values recursively in object?
我有以下对象,我想将所有“选择”键值从“是,否”更改为“显示,隐藏”。
我试图创建一个递归函数来循环对象子项 - 但由于某种原因我无法得到它的工作......
var foo = {
"data": [
{
"body": [
{
"id": "title",
"label": "title",
"subType": "title",
"type": "text"
},
{
"id": "page1",
"label": "Home",
"choices": [
"show",
"hide"
],
"childrenItems": [
{
"id": "subMenu1",
"label": "Gallery",
"choices": [
"yes",
"no"
],
"childrenItems": [
{
"id": "subMenu2",
"label": "Artists",
"choices": [
"yes",
"no"
],
"childrenItems": [
{
"id": "modernisem",
"label": "Modernisem"
},
{
"id": "contemporery",
"label": "Contemporery"
}
]
}
]
}
]
}
]
}
]
}
function setQuestionnaireChoises(prmData) {
return getNestedElements(prmData)
}
function getNestedElements(prmData){
if(!isObject && Array.isArray(prmData)){
return getArrItems(prmData);
}else{
return getObjItems(prmData);
}
}
function getArrItems(prmData){
for (let index = 0; index < prmData.length; index++) {
let arrItem = prmData[index];
if(isObject){
return getObjItems(arrItem)
}else{
return getArrItems(arrItem)
}
}
}
function getObjItems(prmData){
for (const key in prmData) {
let objItem = prmData[key];
if(key == 'choices'){
return objItem[key] = ["show, hide"]
}else{
return objItem[key]
}
}
}
function isObject(prmObj) {
return prmObj !== null && typeof prmObj === 'object' && Array.isArray(prmObj) === false ? true : false;
}
setQuestionnaireChoises(foo)
我的目的是操纵对象随着选择的变化返回自身......谢谢。
代码太大,太复杂。 你可以用这种方式轻松做到,让数据
var foo = {
"data": [
{
"body": [
{
"id": "title",
"label": "title",
"subType": "title",
"type": "text"
},
{
"id": "page1",
"label": "Home",
"choices": [
"show",
"hide"
],
"childrenItems": [
{
"id": "subMenu1",
"label": "Gallery",
"choices": [
"yes",
"no"
],
"childrenItems": [
{
"id": "subMenu2",
"label": "Artists",
"choices": [
"yes",
"no"
],
"childrenItems": [
{
"id": "modernisem",
"label": "Modernisem"
},
{
"id": "contemporery",
"label": "Contemporery"
}
]
}
]
}
]
}
]
}
]
}
你可以像这样改变选择
function setQuestionnaireChoises(prmData) {
if (!(typeof prmData === 'object' || Array.isArray(prmData))) {
return
}
if (prmData.choices) {
prmData.choices = ['show', 'hide'];
}
Object.keys(prmData).forEach((key) => {
setQuestionnaireChoises(prmData[key])
});
}
setQuestionnaireChoises(foo);
console.log(JSON.stringify(foo))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.