Javascript如何实现非递归的n维removeOne



输入

console.log(removeOne([]));
console.log(removeOne([1, 3, 1, 2, 1]));
console.log(removeOne([1, 4, [1, 5, 1, 2]]));
console.log(removeOne([1, 1, [1, 3, [1, 1, 4, 1], 2]]));

输出

[]
[ 3, 2 ]
[ 4, [ 5, 2 ] ]
[ [ 3, [ 4 ], 2 ] ]

function removeOne(ary) {
let result=[];
let stateu=[];
let statej=[];
for(let i=0;i<ary.length;i++){

if(ary[i] instanceof Array){
let tmp=[]
let tmp1=[]
let j=ary[i].slice();

for(let u=0;u<j.length;u++){

console.log("u  "+u);
if(j[u] instanceof Array){
stateu.push(u);

statej.push(j);
j=j[u];
u=-1;

result.push(tmp);
tmp=[];

}
else if(j[u]!=1){
tmp.push(j[u]);
console.log("j   "+j);
if((u+1)==j.length){

result.push(tmp);

}

}
else if((u+1)==j.length){

j=statej.pop();
u=stateu.pop();
console.log("j[u]    "+j);

}
}

}
else if(ary[i]!=1)
result.push(ary[i]);
}
return result;

}

1.我花了很多时间思考,我已经用递归实现了它。但是如何通过使用循环来完全填充呢?

2.必须使用JavaScript来实现。

//在这里更新。

3.实现了非递归结果的基本原型。

4.stateu和statej是两个类似的堆栈,只需使用push和pop将之前的u和j存储为ary[0,1,..n]属于Array。

5.我设置u=-1,因为下一轮u将加1。然后转到新的嵌套数组。

6.j=ary[i],其可以被处理为特定的数组并用于循环。

7.有人能调整我的代码以获得正确的答案吗?

一种"黑客攻击";方法

在couse中,字符串和解析的引擎盖下有递归

const removeOne = (coll) => JSON.parse(
JSON.stringify(coll)
.replaceAll('1,', '')
.replaceAll(',1', '')
);
console.dir(removeOne([1, 1, [1, 3, [1, 1, 4, 1], 2]]), {depth: null});
//[ [ 3, [ 4 ], 2 ] ]

相关内容

  • 没有找到相关文章

最新更新