JSエレガンス(JSコード最適化のヒント)

この記事は、金の創造への道を始めるための「新人創造セレモニー」イベントに参加しました。

前に書く

卒業シーズンのもう1年で、暇なときにため息をつきます。私は若すぎてコーディングの習慣がなく、コーディングの効率に注意を払っていなかったので、ぼんやりと覚えています。インターンシップの段階今日は、プログラミングの最適化のヒントをいくつかまとめました。フロントエンドクラブに入ろうとしている若いキューティーの参考として、高齢者はそれを確認し、修正を追加することを歓迎します。

JSコード最適化のヒント

最適化の場合はシリアル

多くのビジネスでは、多くのブランチが関与することがよくあります。ブランチが多すぎる場合、if-else-ifをcode_1のような非常に醜いコードセグメントに簡単に書き込むことができます。最適化方法は何ですか?コードを見てみましょう

code-1最適化されていないコード

ロジックは非常に単純で、コードに従って対応する色を返します

// code-1
// 未优化前代码
function getColor(code){
  if(code === '200'){
    return 'blue-blue'
  }else if(code === '201'){
    return 'green-green'
  }else if(code === '202'){
    return 'red-red'
  }else{
    return 'other-other'
  }
}
console.log(getColor('200'))
复制代码

code-2はスイッチの最適化を使用します

スイッチ最適化を使用した後のコードの行数は減っていないことがわかりますが、構造は最適化されており、コードはより快適に見え、読み取りは比較的簡単であり、これは最適な選択ではありません

// code-2
// 使用 switch 优化
function getColor2(code){
  switch(code){
    case '200':
      return 'blue-blue'
      break
    case '201':
      return 'green-green'
      break
    case '202':
      return 'red-red'
      break
    default:
      return 'other-other'
      break
  }
}
console.log(getColor2('200'))
复制代码

code-3はマップ最適化を使用します

明らかに、マッピングに最適化されたコードを使用すると、コードの可読性に影響を与えることなくコードサイズが削減されます。より複雑なブランチの場合、マッピング方法には明らかな利点があり、そうすることには別の利点があります。複雑な場合、マッピングを抽出してjsonファイルとしてコードに導入することで、コードをさらに最適化し、保守を容易にすることができます。

// code-3
// 使用映射优化 
function getColor3(code){
  var colorMap = {
    '200': 'blue-blue',
    '201': 'green-green',
    '202': 'red-red',
  }
  return colorMap[code] || 'other-other'
}
console.log(getColor3('200'))
复制代码

オプションの連鎖演算子

名前が示すように、オプションは、読み取り属性がnull(null または undefined)として参照されている場合、コード1などのエラーを引き起こさないことを意味します。reqのデータ構造を判別できない場合、タイプ、チェーン操作req.data.params.typeで取得する必要があり、リクエスト、データ、パラメータの取得に失敗するとエラーが発生するため、&&記号で1つずつ判断する必要があります。

if(req && req.data && req.data.params && req.data.params.type === '200'){}
复制代码

使用しますか?。最適化

?。を使用した後、コードの単純さとラビングの増加がわかります。

if(req?.data?.params?.type === '200'){}
复制代码

オブジェクトをマージする

オブジェクトのマージは、ビジネスで非常に一般的なロジックであると言えます。主に2つの最適化された書き込み方法があります。

未优化代码

通过逐一赋值的方式合并,这种方式非常 ugly,随着 key 值越多,代码 ugly 的程度会急剧增加

let info = {
  name: 'yimwu',
  tel: '134xxxxx320'
}
let otherInfo = {
  name: 'yimwu',
  age: '18',
  address: 'gd'
}
info.age = otherInfo.age
info.address = otherInfo.address
console.log(info)
复制代码

通过扩展运算符优化

let info = {
  name: 'yimwu',
  tel: '134xxxxx320'
}
let otherInfo = {
  name: 'yimwu',
  age: '18',
  address: 'gd'
}
info = {...info, ...otherInfo}
console.log(info)
复制代码

通过 ES6 方法 Object.assign() 优化

let info = {
  name: 'yimwu',
  tel: '134xxxxx320'
}
let otherInfo = {
  name: 'yimwu',
  age: '18',
  address: 'gd'
}
Object.assign(info, otherInfo)
console.log(info)
复制代码

深拷贝

我们都知道对象存在引用,当我们想将一个对象的所有内容赋值给另外一个对象时,如果只是简单的用 “ = ”赋值,两个对象将共享一块内存,也就是说两个对象指向同一个内存块的引用,那么之后改变任何一个对象中的值,两个对象都会同步改变,这并不是我们想要的,因此,在对象赋值时我们需要进行深拷贝,对对象进行拷贝赋值,保证两个对象指向不同的内存块,这样才能保证对象的修改不会互相影响

未优化代码

深拷贝传统的写法需要对对象进行深度遍历,每个对象的 key 逐个赋值

function deepClone(obj) {
  if (typeof obj != 'object') return obj;
  var temp = Array.isArray(obj) ? [] : {};
  for (let key in obj) {
      if (obj.hasOwnProperty(key)) {
          if (obj[key] && typeof obj[key] == 'object') {
              temp[key] = deepClone(obj[key])
          } else {
              temp[key] = obj[key];
          }
      }
  }
  return temp;
}
let info = {
  name: 'yimwu',
  tel: '134xxxxx320',
  address: {
    home: 'jy',
    company: 'gz'
  }
}

let infoCopy = deepClone(info)

复制代码

通过 JSON 方法优化

通过 JSON.parse 和 JSON.stringify 巧妙地将对象转化成字符串再进行解析,js 将重新赋值到新的内存块中,达到深拷贝的效果

let info = {
  name: 'yimwu',
  tel: '134xxxxx320',
  address: {
    home: 'jy',
    company: 'gz'
  }
}

let infoCopy = JSON.parse(JSON.stringify(info))
复制代码

写在最后

今天抽空就先写这么几点,后续继续补充其他相关的优化小Tip,欢迎各位评论区补充,指正!
博主接下来将持续更新好文,欢迎关注博主哟!!
如果文章对您有帮助麻烦亲点赞、收藏 + 关注和博主一起成长哟!!❤❤❤

おすすめ

転載: juejin.im/post/7102809229878099976