2017-09-14 7 views
1

を設定した場合、それは私がそうのようなオブジェクトを構築したいということが一般的です:は、オブジェクトを作成する - キーを含めた値が

const test = { 
    key1: value1, 
    key2: value2, 
    key3: value3, 
    key4: value4, 
} 

はしかし、value3undefinedであればどのように私は簡潔key3を省略することができると言いますか?

現在、私のようなものやってる:

const test = { 
    key1: value1, 
    key2: value2, 
    key4: value4, 
} 

if (value3) test.key3 = value3; 

をしかしそこundefinedかもしれかなりの数の値が存在する状況があるとだけ鍵を返さないための方法がある場合ので、私は思ったんだけど値がundefinedの場合は、条件の負荷がかかりません。

答えて

2

あなただけの未定義されていない値を収集するためにArray.reduceObject.keysを使用することができます。

const test = { 
 
    key1: 'value1', 
 
    key2: 'value2', 
 
    key4: undefined, 
 
} 
 

 
const onlyPopulated = Object.keys(test).reduce((p, key) => { 
 
    if (typeof test[key] !== 'undefined') { 
 
    p[key] = test[key]; 
 
    } 
 
    return p; 
 
}, {}); 
 

 
console.log(onlyPopulated)

+0

これはチケットです。私は前に 'reduce()'を使っていません。いい物。 –

0

あなたはjQueryのを使用することができます場合は、 以下のように拡張し使用することができますhttp://api.jquery.com/jQuery.extend/

基本的には、最初のオブジェクトに供給された2番目のオブジェクトをマージします。ただし、nullまたは未定義のプロパティはマージされません。だから私はそれがあなたのユースケースによく合い、きれいであると思う。実際に

<html lang="en"> 
 
<head> 
 
    <meta charset="utf-8"> 
 
    <title>jQuery.extend demo</title> 
 
    <script src="https://code.jquery.com/jquery-1.10.2.js"></script> 
 
</head> 
 
<body> 
 
    
 
<div id="log"></div> 
 
    
 
<script> 
 
var object1 = { 
 
}; 
 
var test = { 
 
    key1: 1, 
 
    key2: 2, 
 
    key3: undefined, 
 
    key4: 4, 
 
} 
 
    
 
// Merge test into object1 
 
$.extend(object1, test); 
 
    
 
// Assuming JSON.stringify - not available in IE<8 
 
$("#log").append(JSON.stringify(object1)); 
 
</script> 
 
    
 
</body> 
 
</html>

0

私はおそらくすでに他の回答で述べたものと同様の手法を使用します。あなたのオブジェクトのすべての値が安全にそしてJSONに変換できる場合しかし、楽しみのためだけに...

は、所望の結果を達成するための簡潔な方法はstringifyparseを使用することになります

var data = { 
 
    key1: 'string', 
 
    key2: 34, 
 
    key3: undefined, 
 
    key4: [{key: 'nested'}], 
 
    key5: null 
 
}; 
 

 
data = JSON.parse(JSON.stringify(data)); 
 

 
console.log(data);

JSON.stringifyスキップundefinedですが、関数などの他の値の型もスキップします。 nullが含まれます。

もちろん、あなたがこれをやっている理由を知っている人にはすぐには分かりませんが、リファレンス問題を避けるために防御的なコピーを取っていると思われます。

関連する問題