我有一个带有多个嵌套对象的对象,它也可以有对象数组。这是一个示例:
{
"name": "0040",
"id": "9952",
"type": 1,
"items": [
{
"code": "AUD",
"value": 604.84
},
{
"code": "CAD",
"value": 586.36
},
{
"code": "CHF",
"value": 441.56
},
{
"code": "EUR",
"value": 389.87
},
{
"code": "GBP",
"value": 346.01
},
{
"code": "HKD",
"value": 345.31
},
{
"code": "JPY",
"value": 501.67
},
{
"code": "NZD",
"value": 642.29
},
{
"code": "USD",
"value": 441.50
}
]
}
我必须遍历整个对象,并创建一个包含属性code
的所有值的字符串。我已经编写了一个可解决此问题的递归函数,但使用的是称为codes
的全局变量。如何更改该方法以使用局部变量而不是全局变量。
这是我的代码:
getAllCodes(data) {
for (const key in data) {
if (data.hasOwnProperty(key)) {
if (Array.isArray(data[key])) {
this.getAllCodes(data[key]);
} else if (typeof data[key] === 'object') {
if (data[key]['code']) {
this.codes += `${data[key].code}+`;
} else {
this.getAllCodes(data[key]);
}
}
}
}
}
答案 0 :(得分:1)
我在这里看不到需要recursion
。您只需使用reduce即可
let obj = {"name": "0040","id": "9952","type": 1, "items": [{ "code": "AUD","value": 604.84 },{ "code": "CAD","value": 586.36},{"code": "CHF", "value": 441.56 }, { "code": "EUR", "value": 389.87 }, { "code": "GBP", "value": 346.01 }, { "code": "HKD", "value": 345.31 }, { "code": "JPY", "value": 501.67 }, {"code": "NZD","value": 642.29 }, {"code": "USD", "value": 441.50}]}
let codeString = obj.items.reduce((output,{code})=>{
output += code + ' '
return output;
},'')
console.log(codeString)
答案 1 :(得分:1)
您可以采用一个函数来从嵌套对象中递归地收集code
属性。
const
getCode = object => [
...['code' in object ? object.code : ''],
...Object.values(object).filter(o => o && typeof o === 'object').map(getCode)
].join(' ');
var object = { code: 'a', nodes: { code: 'b', nodes: { code: 'c', nodes: { code: 'd' } } } };
console.log(getCode(object));