使用 Object.assign 遍历对象中的对象
looping through objects within an object with Object.assign
下面的脚本当前输出:
{
"title1": {
"0": "undefined"
},
"title2": "& three",
"title3": "& four"
}
期望的输出是:
{
"title1": {
"nested1": "one",
"nested2": "& two"
},
"title2": "& three ",
"title3": "& four"
}
我的问题是 if 语句中需要什么才能成功循环遍历 [key][innerKey] 的属性并将它们传递给编码函数并将它们 return 传递给 'out'?
我一直在尝试在 if 语句的第一部分使用 for 循环来解决它,但没有成功。我认为它需要遵循以下逻辑:
- 如果 arr[key] 是一个对象那么
- 输出[key]:
- 然后遍历 [key]
的所有属性
- 并通过函数编码传递它们
- 和return他们到'out'
谢谢。
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)
我认为这样的事情应该可行:
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);
这适用于您拥有的每个深度(嵌套在其他对象中的对象)
这样的事情怎么样? (递归)
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);
下面的脚本当前输出:
{
"title1": {
"0": "undefined"
},
"title2": "& three",
"title3": "& four"
}
期望的输出是:
{
"title1": {
"nested1": "one",
"nested2": "& two"
},
"title2": "& three ",
"title3": "& four"
}
我的问题是 if 语句中需要什么才能成功循环遍历 [key][innerKey] 的属性并将它们传递给编码函数并将它们 return 传递给 'out'?
我一直在尝试在 if 语句的第一部分使用 for 循环来解决它,但没有成功。我认为它需要遵循以下逻辑:
- 如果 arr[key] 是一个对象那么
- 输出[key]:
- 然后遍历 [key] 的所有属性
- 并通过函数编码传递它们
- 和return他们到'out'
谢谢。
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)
我认为这样的事情应该可行:
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);
这适用于您拥有的每个深度(嵌套在其他对象中的对象)
这样的事情怎么样? (递归)
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);