輸入
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 是兩個like-stack 只是使用push 和pop 來存盤之前的u 和j 因為ary[0,1,.....n] 屬于Array。
5.我設定 u=-1 因為下一輪 u 將加 1。然后向下進入新的嵌套陣列。
6.j=ary[i] 可以處理特定陣列并做for回圈。
7.有人可以調整我的代碼以獲得正確的答案嗎?
uj5u.com熱心網友回復:
一種“黑客”方式。
當然,在 stringify 和 parse 的引擎蓋下有遞回。
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 ] ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/384579.html
標籤:javascript 循环 非递归
上一篇:無法在回圈中執行setter
