15 个回答
function f(n) {
  for (let i = -n; i <= n; i++) {
    if (i === 0 || i === 1) {
      continue
    }
    let k = Math.abs(i)
    console.log(k.toString().repeat(k))
  }
}
console.log(4444);
console.log(333);
console.log(22);
console.log(1);
console.log(22);
console.log(333);
console.log(4444);

链式有人答了,我贡献一个函数式的吧

let f = n => (k => n > 1 ? (k(n), f(n - 1), k(n)) : k(n))(n => console.log((n + "").repeat(n)));

f(4);

来个es6

var arr = []

// 生成倒序的
for (let i = 5; i > 0; i--) {
  arr.push((i+'').repeat(i))
}

// 删除最小的,然后再倒序,在拼接
arr.push(...arr.slice(0, -1).reverse())
function add(num){
        var arr=Array.from({length:num},(item,index)=>(index+1+'').repeat(index+1));
        arr.unshift(...arr.slice(1).reverse());
        return arr;
    }
    console.log(add(4));
const size = 4;
// 生成一个长度为 size 的空数组
new Array(size)
    // 使用空字符填充
    .fill('')
    // 对数组进行映射
    .map((i, index) =>
        // 这里是个闭包,参数为一个用 `size - index` 填充的长度为 [size - index]的数组
        // 将数组打印出来并抛出
        (arr => {return console.log(arr), arr})
        (new Array(size - index).fill(size - index).join('')))
    // 此时 arr = ['4444', '333', '22', '1']
    // 把 `1` 扔掉
    .filter(i => i.length !== 1)
    // 倒叙
    .reverse()    
    // 输出
    .forEach(i => console.log(i))
const t = num => {
    let v = num;
    flag = -1;
    const result = [];
    do {
        result.push(new Array(v).fill(v).join(''));
        if (v === 1) {
            flag = -flag;
        }
        v += flag;
    } while(v <= num)
    return result.join('\n');
}
console.log(t(1));
console.log(t(2));
console.log(t(3));
console.log(t(4));
console.log(t(5));
1

22
1
22

333
22
1
22
333

4444
333
22
1
22
333
4444

55555
4444
333
22
1
22
333
4444
55555

来写一个函数式的实现。

let _ = require('lodash')

function repeat (value) {
    return _.map(_.range(value), () => value)
}

// 最后
console.log(repeat(4).join(''))
console.log(repeat(3).join(''))
console.log(repeat(2).join(''))
console.log(repeat(1).join(''))
console.log(repeat(2).join(''))
console.log(repeat(3).join(''))
console.log(repeat(4).join(''))

哈哈哈

闲。。
首先根据num的初始化一个数组,长度为num*2-1,填充0,不然没法遍历。然后初始化数组为4,3,2,1,2,3,4的形式,然后填充字符

(num=>new Array(num*2-1).fill(0).map((e,i)=>i<num?num-i:(i-num+2)).map(e=>"".padStart(e,e)).join("\n"))(4)

答案


function tree(n){

for(var i=n;i>0;i--){
    var str = '';
    for(var j=0;j<i;j++){
        str += i;
    }
    console.log(str);
}
for(var k=2;k<n+1;k++){
    var str2 = '';
    for(var l=0;l<k;l++){
        str2 += k;
    }
    console.log(str2);
}

}

const reverseTwoNumber =  n => {
  if(n <= 0) {
    throw `n must a positive integer`
  }
  let array = new Array(2*n - 1)
  for(let i = n; i > 0; i --) {
    array[n - i] = i.toString().repeat(i);
    if(i > 1) {
      array[n + i - 1] = i.toString().repeat(i);
    }
  }
  return array
}

那我精简一下,不知道是不是最少代码量。

let a = console.log;
a(4444);
a(333);
a(22);
a(1);
a(22);
a(333);
a(4444);

递归版

const size = 4;
  const array = [];

  function create(num, finalNum, sub) {
    if(num == 1) {
      array.push('*')
      create(2, finalNum, false)
    } else if(num == finalNum) {
      array.push(new Array(finalNum).fill('*').join(''))
      sub && create(finalNum - 1, finalNum, sub)
    } else {
      array.push(new Array(num).fill('*').join(''))
      create(sub ? num - 1 : num + 1, finalNum, sub)
    }
  }

  create(size, size, true);
  array.forEach(function(value) {
    console.log(value)
  })

最简单的递归方法
(function(n) {

            for(let i = n; i > 0; i--){
                for(var j = 0; j < i; j++)
                    document.write(i + '   ')
                document.write('<br/>');
            }
            for(let i = 2; i < n+1; i++){
                for(let j = 0; j < i; j++)
                    document.write(i + '   ')
                document.write('<br/>');
            }
        })(4);
let map = []; // map= [4][4] js会报错 哎 js自身天生就是残疾
let num = 4;

// 声明二维数组 真是操蛋
for(let row = 0; row < num * 2 - 1; row++) {
  map.push([]);

  for(let col = 0; col < num; col++) {
    map[row].push('');
  }
}

for(let row = 0; row < num; row++) {
  let currRow = num - row - 1;

  // 从中间开始对称打印 对称的两行 相加 == num * 2 - 2
  for(let col = 0; col < row + 1; col++) {
    map[currRow][col] = row + 1;
    map[num * 2 - 2 - currRow][col] = row + 1;
  }
}

console.log(map);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏