下面的脚本目前输出:
{
"title1": {
"0": "undefined"
},
"title2": "& three",
"title3": "& four"
}
所需的输出是:
{
"title1": {
"nested1": "one",
"nested2": "& two"
},
"title2": "& three ",
"title3": "& four"
}
我的问题是if语句中成功循环[key] [innerKey]的属性并将它们传递给encode函数并将它们返回'out'需要什么?
我一直试图在if语句的第一部分中使用for循环来解决它而没有成功。我认为它需要遵循以下逻辑:
感谢。
var arr = {
"title1": {
"nested1": "one",
"nested2": "& two"
},
"title2": "& three ",
"title3": "& four"
};
var encodedValues = Object.keys(arr).reduce(function(out,key,innerKey) {
if (typeof arr[key] == "object") {
return Object.assign(out, {[key]: {[innerKey]: encode(arr[key][innerKey])}})
} else {
return Object.assign(out, {[key]: encode(arr[key])})
}
}, {});
console.log(encodedValues)
答案 0 :(得分:3)
我认为这样的事情应该有效:
function encodeValues(arr) {
Object.keys(arr).forEach(item => {
if (typeof arr[item] === "object") encodeValues(arr[item]);
else arr[item] = encode(arr[item]);
});
return arr;
}
var encodedValues = encodeValues(arr);
ES5中的相同代码:
function encodeValues(arr) {
var keys = Object.keys(arr);
for (var i = 0; i < keys.length; i++) {
if (typeof arr[keys[i]] === "object") encodeValues(arr[keys[i]]);
else arr[keys[i]] = encode(arr[keys[i]]);
}
return arr;
}
var encodedValues = encodeValues(arr);
这可以适用于您拥有的每个深度(嵌套在其他对象中的对象)
答案 1 :(得分:2)
这样的事情怎么样? (递归)
var arr = {
"title1": {
"nested1": "one",
"nested2": "& two"
},
"title2": "& three ",
"title3": "& four"
};
var encode = function(val){ return encodeURI(val) };
var encodeValues = function(arr){
var obj = {};
for(var key in arr){
if(typeof arr[key] == "object"){
obj[key] = encodeValues(arr[key]);
}else{
obj[key] = encode(arr[key]);
}
}
return obj;
};
var encodedValues = encodeValues(arr);
console.log(encodedValues);