2016-04-25 12 views
-1

我想寫一個函數,通過一個嵌套數組並返回n個值的總和(參見下面的示例)。如何訪問嵌套數組的第n級?

var children = { 
    value: 1, 
    children: { 
    value: 3, 
    children: { 
     value: 2, 
     children: { 
     value: 5, 
     children: { 
      value: 3 
     } 
     } 
    } 
    } 
} 

我想我需要使用遞歸,這是我怎麼想它應該去:

1)函數PARAMS「數組」和「targetLevel」(的深度,它應該去)並將「值」的總和從級別[0]返回到級別[nth]。

2)開始時,函數檢查裏面的內容是否等於參數級別(如果是,則將當前級別添加到var值,然後返回它)。

3),直到條件滿足以下發生在每一次迭代:

  • 結果+ =值
  • 輔助無功電平++(缺省設定爲0),所以我可以跟蹤在其上水平我目前
  • 在VAR孩子定的數組無電流水平
  • 通話功能與更新PARAMS直到深度條件店滿足

實施例: - 在級>值[0] +上水平值[1] +上水平值[2]


所以,我是

countNthValue(兒童,3)將返回數6甚至正確掌握基本概念(遞歸調用函數,每次迭代存儲數組的較小部分)?如果是這樣,我該如何正確編寫函數?

如果沒有,這只是一個胡言亂語,我如何訪問嵌套數組的第n級?

+1

您展示嵌套對象。 –

回答

0

基地你答曰的對象是14

var children = { 
 
    value: 1, 
 
    children: { 
 
    value: 3, 
 
    children: { 
 
     value: 2, 
 
     children: { 
 
     value: 5, 
 
     children: { 
 
      value: 3 
 
     } 
 
     } 
 
    } 
 
    } 
 
} 
 

 
function sumChildren(children){ 
 
     if(children == undefined|| children== null) return 0; 
 
     return children.value + sumChildren(children.children); 
 
    
 
    } 
 

 
console.log(sumChildren(children));

0

建議:

function getSum(obj, depth){ 
    var num = 0; 
    if(depth - 1) 
     num = getSum(obj.child, depth -1); 
    return num + obj.value; 
} 
0
var children = { 
    value: 1, 
    children: { 
    value: 3, 
    children: { 
     value: 2, 
     children: { 
     value: 5, 
     children: { 
      value: 3 
     } 
     } 
    } 
    } 
} 


function countNthValue (array, depth, current){ 

    if(typeof current === 'undefined') { 
     current = 1; 
    } 

    if (depth > current && array.children) { 
     return array.value + countNthValue(array.children, depth, current+1); 
    } else { 
     return array.value; 
    } 
} 

// Test 
console.log(countNthValue (children, 1)); 
console.log(countNthValue (children, 2)); 
console.log(countNthValue (children, 3)); 
console.log(countNthValue (children, 4)); 
console.log(countNthValue (children, 5)); 
console.log(countNthValue (children, 6)); 
0

你可以做這樣的

var children = { 
 
       value: 1, 
 
       children: { 
 
          value: 3, 
 
          children: { 
 
             value: 2, 
 
             children: { 
 
               value: 5, 
 
               children: { 
 
                  value: 3 
 
                  } 
 
               } 
 
            } 
 
          } 
 
       }, 
 
     sums = (e, v) => !!e.children ? sums(e.children, v + e.value) : v + e.value; 
 
document.write("<pre>" + sums(children,0) + "</pre>");

0

我建議使用陣列和對象的組合與用於遞歸調用的內部Array#reduce的值求和的功能。

var children = [{ 
 
     value: 1, 
 
     children: [{ 
 
      value: 3, 
 
      children: [{ 
 
       value: 2, 
 
       children: [{ 
 
        value: 5, 
 
        children: [{ 
 
         value: 3 
 
        }] 
 
       }] 
 
      }] 
 
     }] 
 
    }], 
 
    i; 
 

 
function getLevel(array, level) { 
 
    return ~level && Array.isArray(array) ? 
 
     array.reduce(function (r, a) { 
 
      return r + a.value + getLevel(a.children, level - 1); 
 
     }, 0) : 
 
     0; 
 
} 
 

 
for (i = 0; i < 5; i++) { 
 
    document.write(getLevel(children, i) + '<br>'); 
 
}