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]]]
此功能仅在尺寸≤3时才有效。此外,它非常难看。这样做的方法是什么?
更新
我知道如何递归地获取数组的最后一个元素:
function get_last(array, dimension) { return dimension === 0 ? array[array.length-1] : get_last(array[array.length-1], dimension-1); }
我需要追加。
答案 0 :(得分:3)
递归算法将遵循这些方针:
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;
}
这还没有经过详尽的测试,所以要小心。
答案 1 :(得分:2)
尝试这种迭代算法:
function append(array, value, level) {
var tmp = array;
while (level > 0) {
for (var i=tmp.length; i>=0; --i) {
if (tmp[i] instanceof Array) {
tmp = tmp[i];
level--;
break;
}
}
if (i < 0) {
break;
}
}
tmp.push(value);
return array;
}
答案 2 :(得分:2)
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]]]]
...
(在犀牛下测试)
答案 3 :(得分:0)
从我的理解,你总是附加到最后和最深的数组。如果是,则无需明确提供维度
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]]]