問題:
目標是建立一個物件簡潔的ES6 中從物件簡潔中提取特定屬性的函數。提出了涉及解構和簡化物件文字的解決方案,但出現了關於欄位清單重複的問題。
答案:
要實現更精簡的解決方案,請考慮使用參數解構以消除對顯式參數的需要:
({id, title}) => ({id, title})
雖然參數解構很方便,但它仍然需要重複財產清單。對於更通用的解決方案,請採用以下方法:
function pick(o, ...props) { return Object.assign({}, ...props.map(prop => ({[prop]: o[prop]}))); }
此解決方案利用 Object.assign 來合併對象,同時保留指定的屬性 (props)。
屬性屬性的其他注意事項:
如果保留原始屬性的屬性(例如可配置性和getters/setters),並排除不可枚舉的屬性,請考慮以下事項:
function pick(o, ...props) { var has = p => o.propertyIsEnumerable(p), get = p => Object.getOwnPropertyDescriptor(o, p); return Object.defineProperties({}, Object.assign({}, ...props .filter(prop => has(prop)) .map(prop => ({prop: get(props)}))) ); }
以上是ES6中如何有效率地提取物件的特定屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!