一個解構賦值的小技巧

當須要從含有衆多字段的一個對象中取出部分字段,來組成新的對象時,你一般會怎麼實現?javascript

若是這些字段裏,有的字段可能並無出現呢?是否須要每一個字段都判斷一次呢?給你們分享一個從 Stack Overflow 上抄來的方法(🤦️):java

const pick = (...props) =>
  ob => props.reduce((other, e) => ob[e] !== undefined ? { ...other, [e]: ob[e] } : other, {});
複製代碼

這個 pick 方法是一個柯里化的函數,在向其中傳入所需字段後,返回的函數能夠將入參對象的對應字段提取到新的對象中,並過濾因爲入參對象未定義 key 產生的 undefined 值。函數

調用方法以下:spa

const source = { a: 1, b: 2, c: 3 };
const result = pick('a', 'c', 'd')(source);  // { a: 1, c: 3 }
複製代碼

將這個方法改寫得好理解一些:code

function pickerGenerate(keys) {
  return function(ob) {
    const result = {};
    keys.forEach(key => {
      if (ob[key] !== undefined) {
        result[key] = ob[key];
      }
    });
    return result;
  }
}
// 生成針對特定字段的 picker 函數
const specifiedPicker = pickerGenerate(['a', 'c', 'd']);
const source = { a: 1, b: 2, c: 3 };
const result = specifiedPicker(source); // { a: 1, c: 3 }
複製代碼
相關文章
相關標籤/搜索