SOURCE

function getPINs(observed) {
 let objPin = new GetPin(observed),
     _getVal= objPin.value
 
 if(objPin.observedLength <= 1) return objPin.kuNum[observed === '0'? 10 : observed]
 
 observed.split('').map(val => {
   val = val === '0' ? 10 : val
   _getVal.key.leng.push(objPin.kuNum[val].length)
   _getVal.key.nums.push(objPin.kuNum[val])
 })
  
let vals = _getVal.max()

let dygx = []
let resArr = [[],[],[],[],[],[],[],[]]

_getVal.key.leng.map((res,index) => {
    objPin.vs.push([])
    vals = vals/_getVal.key.leng[index]
    objPin.vs[index] = vals
})
    
let arr = Array.from(objPin.vs).reverse()

_getVal.key.nums.map((val, index)=>{
        dygx.push({name:'',int:[]})
val.map((oVal,oIndex) =>{
//     console.log(`${oVal}+${index}+${oIndex}`)

    for(let i = 0; i<objPin.vs[index]; i++){
     dygx[index].name = arr[index]
      dygx[index].int.push(oVal)
    }
  })

  
})
console.log(resArr)
dygx.map((res,index) => {
  for(let i = 0; i<res.name; i++){
    

   resArr[index] = resArr[index].concat(res.int)
  }
})






let values = []
for(let i = 0; i< resArr[0].length; i++){
    switch(objPin.observedLength){
      case 2:
         values.push(resArr[0][i]+resArr[1][i])
      break
      
      case 3:
         values.push(resArr[0][i]+resArr[1][i]+resArr[2][i])
      break
      
      case 4:
         values.push(resArr[0][i]+resArr[1][i]+resArr[2][i]+resArr[3][i])
      break
      
      case 8:
         values.push(resArr[0][i]+resArr[1][i]+resArr[2][i]+resArr[3][i]+resArr[4][i]+resArr[5][i]+resArr[6][i]+resArr[7][i])
      break
    }
  
}

//   console.log(values)

  return values
}
function GetPin(observed){
  this.observed = String(observed);
  this.observedLength = observed.length;
  this.vs = [];
  this.value = {
    key:{
      leng:[],
      nums:[]
    },
    whileNum:[],
    isNum:[],
    max:() => this.value.key.leng.reduce((a,b) => a * b),
    results:[]
  }
  this.kuNum = [
   [], 
   ["1","2","4"],
   ["1","2","3","5"],
   ["2","3","6"],
   ["1","4","5","7"],
   ["2","4","5","6","8"],
   ["3","5","6","9"],
   ["4","7","8"],
   ["5","7","8","9","0"],
   ["6","8","9"],
   ["0","8"]
 ]

}


//专家解法
// function getPINs(observed) {
  
//   var adjacent = [
//     /* 0 */ [0, 8],
//     /* 1 */ [1, 2, 4],
//     /* 2 */ [1, 2, 3, 5],
//     /* 3 */ [2, 3, 6],
//     /* 4 */ [1, 4, 5, 7],
//     /* 5 */ [2, 4, 5, 6, 8],
//     /* 6 */ [3, 5, 6, 9],
//     /* 7 */ [4, 7, 8],
//     /* 8 */ [5, 7, 8, 9, 0],
//     /* 9 */ [6, 8, 9]
//   ];

//   //[[2, 3, 6], [3, 5, 6, 9], [6, 8, 9]]  adjacent[d][0] [2,3,6]
//  return observed
//     .split('')
//     .map(function(d) { console.error(`${d}-----DDDDD`);return adjacent[d|0]; })
//     .reduce(function(pa, da) {
//    console.log(`${pa}-------<pa`)
//    console.log(`${da}--------<da`)
//       return da.reduce(function(pv, d) {
//         console.error(`${pv}---------<pv`)
//         console.error(`${d}----------<d`)
//         return pv.concat(pa.map(function(p) {
//           console.info(`${p}-----------<p`)
//           console.info(`${'' + p + d}------------<++++++`)
//           return '' + p + d;
//         }));
//       }, []);
//     }, ['']);
// }



console.log(getPINs('007').sort())

console 命令行工具 X clear

                    
>
console