#39 不用循环生成数组


  • 0
    administrators

    完成 arrWithoutLoop 函数,它会被传入一个整数 n 作为参数,返回一个长度为 n 的数组,数组中每个元素的值等于它的下标。arrWithoutLoop 中不能使用循环控制结构。

    (本题来源:UC 国际前端笔试题)


  • 0

    const arrWithoutLoop = (n) => Array.apply(null,{length:n}).map((item,i)=>i)


  • 1

    ES6就应该这么玩

    const arrWithoutLoop = (n) => [...Array(n)].map((x, i) => i)
    
    const arrWithoutLoop = (n) => Array.from(Array(n), (x, i) => i))
    

  • 5

    const arrWithoutLoop = n => [...Array(n).keys()]
    

  • 0

    0_1498795742404_TIM截图20170630120847.png
    map 不算循环吗


  • 2

    使用递归实现:

    const arrayWithoutLoop = (length) => {
      const array = Array(length)
    
      const recursiveFill = (array) => {
        if (!array[--length] && length >= 0) {
          array[length] = length
          recursiveFill(array)
        }
      }
      recursiveFill(array)
    
      return array
    }
    

  • 0

    const arrWithoutLoop = (n, arr = []) => n ? arr.unshift(n-1) && arrWithoutLoop(n-1, arr) : arr


  • 0

    @ScriptOJ
    let arr = [];
    const arrWithoutLoop = (n) => {

    if(n == 0){
    arr[n] = n;
    return arr;
    }else{
    arr[n] = n;
    return arguments.callee(n-1);
    }

    }

    我用浏览器测试0是可以的,为什么这边提交显示当n=0时,数组长度不正确啊?


  • 1

    const arrWithoutLoop = (n) =>Array.from({length: n}, (v, i) => i);


  • 0

    const arrWithoutLoop = n => n <= 0 ? [] : arrWithoutLoop(n - 1).concat(n - 1)
    
    // or
    
    const acc = (n, a) => n <= 0 ? a : acc(n - 1, [n - 1, ...a])
    const arrWithoutLoop = n => acc(n, [])
    
    // or
    const arrWithoutLoop = (f => f(f))(f => n => n <= 0 ? [] : f(f)(n - 1).concat(n - 1))
    

  • 0

    递归,老办法:
    const arrWithoutLoop = (n) => /* TODO */
    {
    var arr = [];
    //内部递归函数
    innerFun = (_num) => {
    if(_num > 0){
    arr.push(--_num);
    innerFun(_num);
    }
    };
    innerFun(n);
    return arr.reverse();
    }


  • 0

    新手写的递归,代码有点不好看

    const arrWithoutLoop = (n) => {
       let arr = [], num = 0;
       if (n === 0) {
           return arr;
       }
       function fn() {
           arr.push(num);
           num++;
           n--;
           if (n > 0) {
               fn();
           }
       }
    
       fn();
    
       return arr;
    };

  • 0

    const arrWithoutLoop = (n) => {
    return n === 0 ? [] : ''.repeat(n - 1).split('').map((_, index) => index)
    }


  • 0

    const arrWithoutLoop = (n) => {
    return n === 0 ? [] : '%'.repeat(n - 1).split('%').map((_, index) => index)
    }


  • 0

    const arrWithoutLoop = (n) => {
      return n === 0 ? [] : '_'.repeat(n - 1).split('_').map((_, index) => index)
    }
    

  • 0

    新思路
      const arrWithoutLoop = (n) =>  [...(new Array(n)).keys()];
    

  • 0

    const arrWithoutLoop = (n) => {
      let arr = []
      const T = (index) => {
        if (index > 0) {
          arr.unshift(index - 1)
          T(--index)
        }
      }
      T(n)
      return arr 
    }
    
    

登录后回复
 

与 ScriptOJ 的连接断开,我们正在尝试重连,请耐心等待