num = [1, 2, 3] 输出 123,132,213,312,231,321

7 阅读1分钟

我们有一个数组 [1,2,3],需要输出所有排列,输出的是123,132,213,312,231,321

最初版本

const num = [1, 2, 3];
function getNums(num) {
    let nums = []
    let total = 0
    num.forEach(n=>total+=n)
    console.log(total);
    
    num.forEach((n,i)=>{
        let newNum = num.filter(t=> t!==n)
        newNum.forEach(el => {
            nums.push(Number(`${n}${el}${total-el-n}`))
        })
    })
    console.log('nums === ', nums);
}
getNums(num)

优化后版本

const num = [1, 2, 3];
function getNums(num) {
    const total = num.reduce((sum, n) => sum + n, 0);
    const nums = num.flatMap(n => 
        num.filter(t => t !== n)
          .map(el => Number(`${n}${el}${total - n - el}`))
    );
    console.log('nums ===', nums);
}
getNums(num);