Skip to content

classnames实现

jsx
/**
 * @param {any[]} args
 * @returns {string}
 */
function classNames(...args) {
  // your code here
  let resArr=[]
  const canSuingType=['String','Number']
  const ignoreType=['Null', 'Undefined', 'Symbol',  'True', 'False']
  function isObject(item){
    return item instanceof Object
  }
  args.forEach(item=>{
      const currentItemType=sliceType(item)
      
      if(canSuingType.includes(currentItemType)){
        resArr.push(item)
      }else if(ignoreType.includes(currentItemType)){
      }
      if(Array.isArray(item)){
          let flatArr=item.flat(Infinity)
          flatArr.forEach(flatArrItem=>{
            resArr.push(classNames(flatArrItem))
          })
        }
      if(currentItemType == 'Object'|| currentItemType =='Map'){
          for(let key in item){
            if(item[key]){
              resArr.push(key)
          }
        }
      }
  })
  return resArr.length==0?'':resArr.join(' ')
}

  function sliceType(item){
    const itemString=Object.prototype.toString.call(item)
    return itemString.slice(8,itemString.length-1)
  }
  const obj = new Map()
  obj.cool = '!'

 console.log(
   classNames(['BFE', [{dev: true}, ['is', [obj]]]])
   )
//  function whichType(item){
//    let res=''
//    let isSplice=false
//    const itemString=Object.prototype.toString.call(item)
//    for(let i=0;i<itemString.length;i++){
//      if(isSplice&&itemString[i]!==']'){
//        res+=itemString[i]
//      }
//      if(itemString[i]==' '){
//        isSplice=true
//      }
//    }
//     return res
//   }
  // console.log(sliceType(undefined))

  // function regType(item){
  //   let reg=/' ()]'/
  //   const itemString=Object.prototype.toString.call(item)
  //   return itemString.match(reg)
  // }
/**
 * @param {any[]} args
 * @returns {string}
 */
function classNames(...args) {
  // your code here
  let resArr=[]
  const canSuingType=['String','Number']
  const ignoreType=['Null', 'Undefined', 'Symbol',  'True', 'False']
  function isObject(item){
    return item instanceof Object
  }
  args.forEach(item=>{
      const currentItemType=sliceType(item)
      
      if(canSuingType.includes(currentItemType)){
        resArr.push(item)
      }else if(ignoreType.includes(currentItemType)){
      }
      if(Array.isArray(item)){
          let flatArr=item.flat(Infinity)
          flatArr.forEach(flatArrItem=>{
            resArr.push(classNames(flatArrItem))
          })
        }
      if(currentItemType == 'Object'|| currentItemType =='Map'){
          for(let key in item){
            if(item[key]){
              resArr.push(key)
          }
        }
      }
  })
  return resArr.length==0?'':resArr.join(' ')
}

  function sliceType(item){
    const itemString=Object.prototype.toString.call(item)
    return itemString.slice(8,itemString.length-1)
  }
  const obj = new Map()
  obj.cool = '!'

 console.log(
   classNames(['BFE', [{dev: true}, ['is', [obj]]]])
   )
//  function whichType(item){
//    let res=''
//    let isSplice=false
//    const itemString=Object.prototype.toString.call(item)
//    for(let i=0;i<itemString.length;i++){
//      if(isSplice&&itemString[i]!==']'){
//        res+=itemString[i]
//      }
//      if(itemString[i]==' '){
//        isSplice=true
//      }
//    }
//     return res
//   }
  // console.log(sliceType(undefined))

  // function regType(item){
  //   let reg=/' ()]'/
  //   const itemString=Object.prototype.toString.call(item)
  //   return itemString.match(reg)
  // }

Released under the MIT License.