Javascript 向多维数组追加值 函数追加(数组、值、维度){ 开关(尺寸){ 案例0: array.push(值); 打破 案例1: 数组[array.length-1].push(值); 打破 案例2: 数组[array.length-1][array[array.length-1].length-1].push(值); 打破 案例3: 数组[array.length-1][array[array.length-1].length-1][array[array.length-1].length-1].push(值); 打破 } 返回数组; } 追加([0,1],9,0)/[0,1,9] 追加([0[1]],9,0)/[0[1],9] 追加([0[1]],9,1)/[0[1,9]] 附加([1,2,3,4]]]]9,3)/[1,2,3,4,9]]] 附加([1,2,3,2,4]]]9,2)/[1,2,3,2,4]]

Javascript 向多维数组追加值 函数追加(数组、值、维度){ 开关(尺寸){ 案例0: array.push(值); 打破 案例1: 数组[array.length-1].push(值); 打破 案例2: 数组[array.length-1][array[array.length-1].length-1].push(值); 打破 案例3: 数组[array.length-1][array[array.length-1].length-1][array[array.length-1].length-1].push(值); 打破 } 返回数组; } 追加([0,1],9,0)/[0,1,9] 追加([0[1]],9,0)/[0[1],9] 追加([0[1]],9,1)/[0[1,9]] 附加([1,2,3,4]]]]9,3)/[1,2,3,4,9]]] 附加([1,2,3,2,4]]]9,2)/[1,2,3,2,4]],javascript,algorithm,arrays,Javascript,Algorithm,Arrays,此函数仅在以下情况下正常工作:≤ 3.而且,它非常丑陋。这是一个多么合适的方法啊 更新: 我知道如何递归获取数组的最后一个元素: function append (array, value, dimension) { switch (dimension) { case 0: array.push( value ); break; case 1: array[array.length-1].push( value ); break

此函数仅在以下情况下正常工作:≤ 3.而且,它非常丑陋。这是一个多么合适的方法啊

更新:
我知道如何递归获取数组的最后一个元素:

function append (array, value, dimension) { switch (dimension) { case 0: array.push( value ); break; case 1: array[array.length-1].push( value ); break; case 2: array[array.length-1][array[array.length-1].length-1].push( value ); break; case 3: array[array.length-1][array[array.length-1].length-1][array[array[array.length-1].length-1].length-1].push( value ); break; } return array; } append([0,1], 9, 0) // [0,1,9] append([0,[1]], 9, 0) // [0,[1],9] append([0,[1]], 9, 1) // [0,[1,9]] append([1,[2,[3,[4]]]], 9, 3) // [1,[2,[3,[4,9]]]] append([1,[2,[3],2,[4]]], 9, 2) // [1,[2,[3],2,[4,9]]] 函数get_last(数组、维度){ 返回维度===0?数组[array.length-1]:最后获取(数组[array.length-1],维度-1); }
我需要追加。

递归算法将遵循以下几行:

function get_last(array, dimension) { return dimension === 0 ? array[array.length-1] : get_last(array[array.length-1], dimension-1); } 在此过程中,您必须确保函数接受的值是合理的

更新: 您可以尝试以下方法:

Base Case: Append to 0th dimension, Just do it.
Recursive Case: Append to nth dimension where n > 0, Append to n-1 dimension 

这还没有经过详尽的测试,所以要小心。

尝试以下迭代算法:

 function append2(array, value, dimension){
    if(dimension == 0){
       array.push( value );
    }else{
       append(array[array.length-1], value, dimension - 1);
    }

    return array;
  }
函数附加(数组、值、级别){
var-tmp=数组;
而(级别>0){
对于(变量i=tmp.length;i>=0;--i){
if(tmp[i]数组实例){
tmp=tmp[i];
级别--;
打破
}
}
if(i<0){
打破
}
}
tmp.push(值);
返回数组;
}
然后


(在rhino下测试)

根据我的理解,您总是附加到最后一个最深的数组。如果是,则不需要显式提供维度

a = [0,[1,2]]; a.append(9, 0) // [0,[1,2],9]
a = [0,[1,2]]; a.append(9, 1) // [0,[1,2,9]]
a = [1,[2,[3,[4]]]]; a.append(9, 3) // [1,[2,[3,[4,9]]]]
...
}


使用递归函数想要的行为实际上没有指定如何处理,例如追加([0[1],[1]],9,1)追加([0[1],[1]],9,1)/[0[1],[1,9]]伪代码看起来很简单,但我真的不知道如何将其转换为JS.Nope。追加([0[1]],9,0)/[0[1],9]追加([0[1]],9,1)/[0[1,9]]应该是错误的。Gumbo的函数返回[0,1,2,9,3],这是错误的。
Array.prototype.append = function (aElem, aDim) {
  if (aDim > 0) {
    this[this.length - 1].append(aElem, aDim - 1);
  } else {
    this.push(aElem);
  }

  return this;
}
a = [0,[1,2]]; a.append(9, 0) // [0,[1,2],9]
a = [0,[1,2]]; a.append(9, 1) // [0,[1,2,9]]
a = [1,[2,[3,[4]]]]; a.append(9, 3) // [1,[2,[3,[4,9]]]]
...
lastArray = function(a) {
  var p = a[a.length - 1];
  return p.push ? lastArray(p) : a;
r = [1, 2, [3, [4, 5]]]
lastArray(r).push(9)
console.log(r) // [1, 2, [3, [4, 5, 9]]]