Javascript 如何访问嵌套数组的第n级?

Javascript 如何访问嵌套数组的第n级?,javascript,algorithm,multidimensional-array,Javascript,Algorithm,Multidimensional Array,我想编写一个通过嵌套数组并返回n个值之和的函数(参见下面的示例) 我认为我需要使用递归,我认为应该这样做: 1) 函数接受参数“array”和“targetLevel”(它应该到达的深度),并返回从级别[0]到级别[n]的“value”之和 2) 在开始时,函数检查内部的级别是否等于参数级别(如果是,则将当前级别添加到var值,然后返回) 3) 在满足条件之前,每次迭代都会发生以下情况: 结果+=值 辅助变量级别++(默认设置为0),因此我可以跟踪当前所在的级别 在var子级中存储没有当前级别

我想编写一个通过嵌套数组并返回n个值之和的函数(参见下面的示例)

我认为我需要使用递归,我认为应该这样做:

1) 函数接受参数“array”和“targetLevel”(它应该到达的深度),并返回从级别[0]到级别[n]的“value”之和

2) 在开始时,函数检查内部的级别是否等于参数级别(如果是,则将当前级别添加到var值,然后返回)

3) 在满足条件之前,每次迭代都会发生以下情况:

  • 结果+=值
  • 辅助变量级别++(默认设置为0),因此我可以跟踪当前所在的级别
  • 在var子级中存储没有当前级别的给定数组
  • 使用更新的参数调用函数,直到满足深度条件
例如:

countNthValue(子级,3)将返回数字6->level[0]上的值+level[1]上的值+level[2]上的值


那么,我是否正确地掌握了基本概念(递归调用函数,每次迭代存储数组的较小部分)?如果是,如何正确编写函数


如果不是,这只是胡言乱语,我如何访问嵌套数组的第n级

根据您给出的对象,答案是14

var子项={
价值:1,
儿童:{
价值:3,
儿童:{
价值:2,
儿童:{
数值:5,
儿童:{
价值:3
}
}
}
}
}
儿童功能(儿童){
if(children==undefined | | children==null)返回0;
返回children.value+sumChildren(children.children);
}
console.log(sumChildren(children))建议:

function getSum(obj, depth){
  var num = 0;
  if(depth - 1)
       num = getSum(obj.child, depth -1);
   return num + obj.value;
}
你可以这样做

var子项={
价值:1,
儿童:{
价值:3,
儿童:{
价值:2,
儿童:{
数值:5,
儿童:{
价值:3
}
}
}
}
},
总和=(e,v)=>!!e、 孩子们?总和(e.子项,v+e.值):v+e.值;

写(“+和(子项,0)+”)我建议使用数组和对象的组合以及递归调用的函数,内部用于求和值

var子项=[{
价值:1,
儿童:[{
价值:3,
儿童:[{
价值:2,
儿童:[{
数值:5,
儿童:[{
价值:3
}]
}]
}]
}]
}],
我
函数getLevel(数组,级别){
返回~level&&Array.isArray(数组)?
array.reduce(函数(r,a){
返回r+a.value+getLevel(a.children,level-1);
}, 0) :
0;
}
对于(i=0;i<5;i++){
编写(getLevel(children,i)+'
');
}
显示嵌套对象。
function getSum(obj, depth){
  var num = 0;
  if(depth - 1)
       num = getSum(obj.child, depth -1);
   return num + obj.value;
}
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));