2017-03-07 1 views
0

こんにちは私はundefinedまたはnullのようなプロパティ値を返したいオブジェクト。ここに私の目的があります。Lodashを使用してオブジェクトにプロパティが見つからない場合、オブジェクト値を `nullまたは` undefined`にする方法

var build= { 'ts1': 1, 'ts2': '2', 'ts3': 3 }; 

私はそれが唯一のオブジェクトに存在している値を選ぶの値を選択する_.pick機能を使用しています。ここ は私のコードです:

_.pick(build, [ 'ts0' 'ts1', 'ts2','ts5','ts6','ts7']); 

私はこのような結果を得ています:

{ 'ts1': 1, 'ts2': '2'} 

と予想される出力は次のとおりです。

{ 'ts0':null, 'ts1': 1, 'ts2': '2','ts5':null,'ts6':null,'ts7':null} 

誰がこの上で私を助けることができるしてください。

+0

'_.pick'はgivに設計されていますあなたはオブジェクトのプロパティのサブセットです。元のオブジェクトに決して存在しなかった「ヌル」にプロパティを割り当てません。 – gyre

+0

@gyreには、私の問題を解決する他の機能があります。 – Jeevan

+0

必要ないかもしれません。下の私の答えを参照してください。 – gyre

答えて

0

これはちょうど_.pickの仕組みではありません。あなたは何をしようとしているのかを達成するために_.assignを使うことができます。

var build = { 
 
    'ts1': 1, 
 
    'ts2': '2', 
 
    'ts3': 3 
 
}; 
 

 
let result = _.assign({ 
 
    ts0: null, 
 
    ts1: null, 
 
    ts2: null, 
 
    ts3: null, 
 
    ts4: null, 
 
    ts5: null, 
 
    ts6: null, 
 
    ts7: null 
 
}, 
 
build); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

+0

こんにちは@ジョーダンしかし、私はこれのように割り当てることはできませんsoo多くのプロパティ名が来るでしょう。私はそれを手動で割り当てることができません。 – Jeevan

+0

さて、@ gyreさんの答えはそれのためにそれを行う必要があります。 –

2

_.pickあなたのオブジェクトのプロパティのサブセットを提供するように設計されています。元のオブジェクトに決して存在していなかったnullにプロパティを割り当てません。

しかし、あなたがいることを述べた:

は私がundefinedまたはnullあなたのため

幸いにもオブジェクト内に存在しないかのようにプロパティ値を返したい、JavaScriptはすでに(デフォルトでこれを行いますプロパティーがターゲット・オブジェクトに存在しないすべてのプロパティー・アクセスについては、undefinedを戻します)。あなたが本当ににプロパティが必要な場合:編集

var build = { 
 
    'ts1': 1, 
 
    'ts2': '2', 
 
    'ts3': 3 
 
} 
 

 
var result = _.pick(build, [ 
 
    'ts0', 'ts1', 'ts2', 'ts5', 'ts6', 'ts7' 
 
]) 
 

 
console.log(result['ts0']) //=> undefined 
 
console.log(result['ts1']) //=> 1
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

:だから、あなたは単にあなたが既に持っているとundefinedにプロパティ値のデフォルトを持つように、通常のブラケットプロパティアクセス記法を使用したコードを使用することができます

var build = { 
 
    'ts1': 1, 
 
    'ts2': '2', 
 
    'ts3': 3 
 
} 
 

 
var result = _.reduce([ 
 
    'ts0', 'ts1', 'ts2', 'ts5', 'ts6', 'ts7' 
 
], function (o, e) { 
 
    o[e] = e in build ? build[e] : null 
 
    return o 
 
}, {}) 
 

 
console.log(result['ts0']) //=> undefined 
 
console.log(result['ts1']) //=> 1
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
nullにオブジェクトとデフォルトに存在するには、次の方法を使用することができます

+0

あなたの返事のためにgyreありがとう、しかし、私はオブジェクトでのみ必要です、私はいくつかの他の目的のためにこのオブジェクトを比較するつもりです。結果に予想通りにオブジェクトを取得しています。 – Jeevan

+0

@ Jeevanあなたが尋ねたことをすべき第2の選択肢で編集しました – gyre

+0

唯一の依存関係が '_.reduce'ならば、代わりに' Array.prototype.reduce'を使うことができます。 – 4castle

1

目的の値を反復して新しいオブジェクトを作成できます。 _.setは新しいオブジェクトに値を追加します。 _.getは既存のオブジェクトから値を取得しようとしますが、存在しない場合はnullをデフォルト値として使用します。

var build = { 
 
    'ts1': 1, 
 
    'ts2': '2', 
 
    'ts3': 3 
 
}; 
 
var pickValues = ['ts0', 'ts1', 'ts2', 'ts5', 'ts6', 'ts7']; 
 
var result = {}; 
 
_.forEach(pickValues, function(key) { 
 
    _.set(result, key, _.get(build, key, null)); 
 
}); 
 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

1
あなたは、そのプロパティで、 buildの値に設定された値をオブジェクトのために、配列を反復的特性を割り当てる for..ofループを使用することができ

、又はnull

var build = { 'ts1': 1, 'ts2': '2', 'ts3': 3 }; 
 
let props = ['ts0', 'ts1', 'ts2','ts5','ts6','ts7']; 
 
let res = {}; 
 
for (let prop of props) res[prop] = build[prop] || null; 
 
console.log(res);