2016-04-14 14 views
1

オブジェクト内をループして、配列で定義された値を探しています。プロパティは、通常、エポックタイムスタンプを持つプロパティです。オブジェクトのプロパティを検索し値を変更する

プロパティが見つかると、そのプロパティの値を人間が読める形式に変換します。

may myArray = ["dob", "movingDate"]; 

var myObj = { 
    prop1: "hi", 
    prop2: "goodnight", 
    prop3: "welcome", 
    prop4: "now", 
    name: "Alfred", 
    age: 46, 
    dob: 3165300688, 
    gender: "female", 
    movingDate: 1461233587 
} 

for (var i = 0; i < myArray.length; i++) {  
    var exists = _.has(myObj, myArray[i]); 
} 

プロパティが存在する場合は正しく検出されますが、プロパティ値はどのように取得できますか?

標準Object.Keysの表記を使用して上記を修正できますが、lodashmomentでこれを実行しようとしています。

私は財産を持っていたら、私は経由して変換するために、瞬間を使用することができます。私は使用する必要があり

prop = moment.format('DD-MM-YY HH:mm:ss.SSS'); 

_.pick 

または:

_.update 

答えて

0

そうしないとここでもロダッシュが必要です。簡単にforEachin-operatorで不動産の存在をテストすれば十分でしょう:

myArray.forEach(function(value) { 
    if (value in myObj) { 
    myObj[value] = moment.unix(myObj[value]).format('DD-MM-YY HH:mm:ss.SSS'); 
    } 
}); 
1

あなたは、単にあなたがメソッドの瞬間を使用して、日付形式にタイムスタンプをフォーマットするは、FormatDate(またはあなたのfavのライブラリーのいずれか)

1

を持っていると仮定すると

myArray.forEach(function(val){ 
    if (myObj.hasOwnProperty(val)) 
    { 
    myObj[val] = formatDate(myObj[val]); 
    } 
}); 

を実行して、プロパティ値を取得することができます

function formatDate(val) { return new Date(val); } 

_.assign({}, myObj, 
    _(myObj) 
    .pick(myArray) 
    .mapValues(formatDate) 
    .value()); 

を呼び出すことに注意してください。は実際にはmyObjに変更する代わりに新しいオブジェクトを作成します。これは最初の引数 - {}が原因です。 myObjの参照を変更する必要がある場合は、この最初の引数を削除してください。

割り当てられる値は、myArraypick()に基づいて値を選択した結果です。これはオブジェクトを返すので、日付の書式設定にmapValues()関数を使用します。formatDate()関数は何も返すことができません。

+0

不変性は確かに行く方法です。 +1 – Neovea

関連する問題