0
배열이 객체 유형 인 경우 다음 재귀 함수가 중첩 배열을 출력하지 못하는 이유는 무엇입니까?객체를 반복 할 때 객체를 검사 할 때 배열을 검사 할 때
예상 출력과 실제 출력은 설명하기위한 것입니다.
// dummy encode function
function encode(value) {
return value + " (this value was encoded!)"
}
var arr = {
"title1": {
"item1": "one",
"item2": "two"
},
"title2": "three",
"title3": "four",
"title4": {
"item1": [{
"arrayItem": "First array item"
}, {
"arrayItem": "Second array item"
}]
},
"title5": {
"item1": {
"subItem1": "five",
"subItem2": "six"
}
}
};
function encodeValues(arr) {
var keys = Object.keys(arr);
for (var i = 0; i < keys.length; i++) {
if (!!arr[keys[i]] && typeof arr[keys[i]] === "object") encodeValues(arr[keys[i]]);
else arr[keys[i]] = encode(arr[keys[i]]);
}
return arr;
}
var encodedValues = encodeValues(arr);
console.log(encodedValues)
예상 출력 :
{
title1: {
item1: 'one (this value was encoded!)',
item2: 'two (this value was encoded!)'
},
title2: 'three (this value was encoded!)',
title3: 'four (this value was encoded!)',
title4: {
item1: [{
arrayItem: First array item(this value was encoded!)
}, {
arrayItem: Second array item(this value was encoded!)
}]
},
title5: {
item1: {
subItem1: 'five (this value was encoded!)',
subItem2: 'six (this value was encoded!)'
}
}
}
실제 출력 :
{
title1: {
item1: 'one (this value was encoded!)',
item2: 'two (this value was encoded!)'
},
title2: 'three (this value was encoded!)',
title3: 'four (this value was encoded!)',
title4: {
item1: [
[Object],
[Object]
]
},
title5: {
item1: {
subItem1: 'five (this value was encoded!)',
subItem2: 'six (this value was encoded!)'
}
}
}
이 솔루션은 if 문에서 배열의 예를 들면 다음을 확인하십시오 즉의 라인을 따라 어떤 것입니까? :
if (!!arr[keys[i]] && arr[keys[i]] instanceof Array)
encodeValues(arr[keys[i]]);
else if (!!arr[keys[i]] && typeof arr[keys[i]] === "object")
encodeValues(arr[keys[i]]);
else
arr[keys[i]] = encode(arr[keys[i]]);
감사합니다.
FIP. 그래 그거야. 나를 바르게 두게 해줘서 고마워! – fivedoor