2017-10-02 10 views
0
user = { 
    firstName: 'Nick', 
    age: 35 
    location: { 
    country: 'USA', 
    city: 'NYC', 
    }, 
} 

を知らなくても、オブジェクトの子プロパティのデフォルト値を設定し、私は多くの場合、このシナリオで実行しています:置き及び小道具名

私は、デフォルト値のいくつかの小道具を設定する必要が突然変異/減速を持っています。明示的に設定を解除/リセットする必要はありません。 (たとえば、ユーザーログアウト:user.firstName = ''など)。

オブジェクトの構造を知らなくても、これらの値をそれぞれ削除して(nullまたは空の文字列に設定する)最も効率的で安全な方法は何ですか?どのようなロダッシュや他の図書館にもその方法がありますか?

私は基本的にfor...in

for (prop in user) { 
    console.log(prop); 
} 

またはObject.keys、または以前のものを置き換えることができ、デフォルトのオブジェクトを維持するを使用して再帰的な解決策を考えています。

望ましい結果

user = { 
    firstName: '', 
    age: null, 
    location: { 
    country: '', 
    city: '', 
    }, 
} 
+0

何を達成しようとしていますか? –

+0

'for..in'がプロトタイプチェーンの列挙可能なプロパティを繰り返し処理するので、私は' Object.keys'を使用します。あなたはその動作を望むとは思わないでしょう。 – Taurus

答えて

1

あなたがNULLまたは空の文字列にすべての値を設定するために再帰関数を使用することができます。値がオブジェクトの場合は、それを関数に戻します。

let user = { 
 
    firstName: 'Nick', 
 
    age: 35, 
 
    location: { 
 
    country: 'USA', 
 
    city: 'NYC', 
 
    }, 
 
} 
 

 
function nullify(obj) { 
 
    Object.keys(obj).forEach(key => { 
 
    if (typeof obj[key] === 'object') { 
 
     return nullify(obj[key]); 
 
    } 
 
    obj[key] = (typeof obj[key] === 'string') ? '' : null; 
 
    }); 
 
    return obj; 
 
} 
 

 
console.log(nullify(user));

+0

私が必要と考えるのは、デフォルトオブジェクトです –

0

私は間違った方法を考えていました。私の質問は、Vuex実装の一部でした.Vuexは、プログラムで状態をリセットするメソッドをAPIに提供しています。 シンプルなObject.assign(state, defaultState);はこのトリックを行うことができます。