关于js递归问题?

最近刚接触到递归,然后遇到了下面这个问题,不知道怎么写下去了

var array = [
    1,
    [3,4,[2,3,[2,3]]],
    [2,[4]]
]

array结构如上,但层级不定

需求,将array中所有的3置为0

然后我的代码如下,else里面不知道怎么写了,该如何获取当前值的路径呢,请问下各位这里该怎么处理?

function setArr(arr) {
    if (typeof arr == 'object') {
        arr.forEach((item, index) => {
            return setArr(item)
        })
    } else {
        // ?
    }
}

setArr(array)
阅读 2.3k
4 个回答
function isArray(arr) {
    return Object.prototype.toString.call(arr) === '[object Array]'
}

function setArr (arr) {
    arr.forEach((item, idx) => {
        if (isArray(item)) {
            setArr(item)
        } else if (item === 3) {
            arr[idx] = 0
        }
    })
}
var array = [1, [3, 4, [2, 3, [2, 3]]], [2, [4]]];
function setArr(e) {
  if (Array.isArray(e)) {
    e.forEach((item, index) => e[index] = setArr(item));
  } else if (e === 3) {
    e = 0;
  }
  return e;
}
setArr(array);

image.png

function setArr(arr, parent, index) {
    if ( arr instanceof Array) {
        arr.forEach((item, index) => {
            return setArr(item, arr, index)
        })
    } else if(arr === 3) {
        // ?
        parent[index] = 0;
    }
}

setArr(array);

还可以再优化一下,就可以不用这么多参数了。

function setArr(arr) {
    for(i=0;i<arr.length;i++){
        if (Array.isArray(arr[i])){
            arr[i]=setArr(arr[i])
        }else{
            arr[i] = arr[i]==3 ?  0 : arr[i]
        }
    }
    return arr
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题