[英]angular 2 - how do I iterate through a JSON response that contains an object which contains an array of objects?
[英]How to iterate through an object which contains another object
let list = {
value: 15,
rest: {
value: 15,
rest: {
value: 15,
rest: null
}
}
};
我想得到所有值的总和。 我怎样才能做到这一点?
你至少有两个选择:
递归
环形
通过递归,您可以为此编写一个 function ,它会在必要时调用自身(递归)。
例如:
function sumValues(list) {
let sum = list.value;
if (list.rest) {
// Recurse
sum += sumValues(list.rest);
}
return sum;
}
现场示例:
let list = { value: 15, rest: { value: 15, rest: { value: 15, rest: null } } }; function sumValues(list) { let sum = list.value; if (list.rest) { // Recurse sum += sumValues(list.rest); } return sum; } console.log(sumValues(list));
这可以用更短的方式编写,但我想强调上述步骤:
function sumValues(list) {
return list.value + (list.rest ? sumValues(list.rest) : 0);
}
现场示例:
let list = { value: 15, rest: { value: 15, rest: { value: 15, rest: null } } }; function sumValues(list) { return list.value + (list.rest? sumValues(list.rest): 0); } console.log(sumValues(list));
但是,这种特殊的结构可以很好地与循环配合使用:
function sumValues(list) {
let sum = 0;
for (let entry = list; entry; entry = entry.rest) {
sum += entry.value;
}
return sum;
}
现场示例:
let list = { value: 15, rest: { value: 15, rest: { value: 15, rest: null } } }; function sumValues(list) { let sum = 0; for (let entry = list; entry; entry = entry.rest) { sum += entry.value; } return sum; } console.log(sumValues(list));
或使用while
:
function sumValues(list) {
let sum = 0;
let entry = list;
while (entry) {
sum += entry.value;
entry = entry.rest;
}
return sum;
}
现场示例:
let list = { value: 15, rest: { value: 15, rest: { value: 15, rest: null } } }; function sumValues(list) { let sum = 0; let entry = list; while (entry) { sum += entry.value; entry = entry.rest; } return sum; } console.log(sumValues(list));
使用递归是遍历所有嵌套对象的一种可能方式。
let list = { value: 15, rest: { value: 15, rest: { value: 15, rest: null } } }; const sum = (list) => { let acc = list.value; if (list.rest) { acc += sum(list.rest); } return acc; } var res = sum(list); console.log(res);
具有解构赋值的迭代和递归解决方案。
let list = { value: 3, rest: { value: 7, rest: { value: 15, rest: null } } }; function sum_iteratively({ value, rest }) { while(rest) { value += rest.value; rest = rest.rest; } return value; } function sum_recursively({ value, rest }) { return value + (rest?sum_recursively(rest):0); } console.log(sum_iteratively(list)); console.log(sum_recursively(list));
.as-console-wrapper { top: 0; max-height: 100%;important; }
递归方法可以这样使用
function findSum(list){
sum = list.value;
if(list.rest){
sum += findSum(list.rest);
}
return sum;
}
console.log(findSum(list));
或者像这样更简单
function findSum(list){
return list.rest ? findSum(list.rest) + list.value : list.value;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.