2017-06-11 11 views
-2

定義されたプロパティのみを持つオブジェクトを返す関数があります。定義されたプロパティのみを持つオブジェクトを作成する

どのように関数をリファクタリングして、すべてのパラメータ値に対してif節を作成する必要はありませんか?これを行うにはよりエレガントな方法が必要です。

const getQuery = ({ foo, bar, zoo }) => { 
    const query = {}; 

    if (foo) { 
    query.foo = foo; 
    } 
    if (bar) { 
    query.bar = bar; 
    } 
    if (zoo) { 
    query.zoo = zoo; 
    } 

    return query; 
} 

答えて

1

私は

function getQuery(obj){ 
    // filter the accepted keys 
    var filtered = Object.keys(obj).filter((k) => ~["foo", "bar", "baz"].indexOf(k)) 
    // construct new object with filtered keys 
    var query = {} 
    filtered.forEach((k) => query[k] = obj[k]) 
    return query 
} 
1

ような何かをするだろうと、ここでwantedProps配列に提供される唯一のプロパティをコピーします基本的な機能です。元のオブジェクトを変更することはありません。

let filterProperties = (originalObject = {}, wantedProps = []) => 
{ 
    let filteredObject = {}; 
    wantedProps.forEach(val => filteredObject[val] = originalObject[val]); 
    return filteredObject; 
} 

あなただけの、あなたが行うことができ未定義ヴァルスをフィルタリングしようとしている場合:

obj => { 
    let newObject = {} 
    Object.keys(obj).forEach(key => { 
     if(obj[key] !== undefined) newObject[key] = obj[key]; 
    }) 
    return newObject; 
} 
関連する問題