2017-03-18 7 views
0

タイトル。私は2つまたは3つのタイプのオブジェクトを持つことができますが、新しいキー/プロパティが将来のオブジェクトに追加される場合、他のすべてのケースをカバーする信頼できる関数を作成したいと思います。他のオブジェクトと比較して1つまたは2つのキーを持たないオブジェクトでも、オブジェクトの配列をマップします。

私は同じプロパティを持つオブジェクトを通してマッピングてるときはいつでも(obj1obj4)すべてがK.は私がかであってもなくてもよいことkeysarr内のすべてのオブジェクト間をマッピングする機能を作りたいときに問題がされています特定のオブジェクト。

私は、arrのすべてのオブジェクトキーを分析できない限り、新しいキーが追加された場合、ユニークなキーオブジェクトを持つ新しい配列を作成することによって、将来的に機能を信頼できるものにしません。しかし、オブジェクトに10個のキーがあり、配列に1000個以上のオブジェクトがある場合は、パフォーマンス上の問題があると想定します。私が間違っているなら、私を修正してください。

.hasOwnProperty()と同じです。

const arr = [ 
    obj1 = { 
    key1: val1, 
    key2: val2, 
    key3: val3 
    }, 
    obj2 = { 
    key3: val3 
    }, 
    obj3 = { 
    key1: val4, 
    key2: val5, 
    key3: val1 
    }, 
    obj4 = { 
    key1: val6, 
    key2: val7 
    } 
] 
+0

あなたが何を求めているのか不明です。 –

+0

正確に何をしたいですか..?私はあなたが 'Object.assign()'が必要なような不思議な気持ちを持っています – Redu

+0

* "K" *は何ですか?いくつかのユースケースを追加してください。 –

答えて

0

次のような機能が必要な場合があります。

function fillMissingKeys(a){ 
 
    var keys = a.reduce((k,o) => Object.assign(k,Object.keys(o)),[]) 
 
       .reduce((o,k) => (o[k] = null,o),{}); 
 
      
 
    return a.map(o => Object.assign({},keys,o)); 
 
} 
 

 
var arr = [ 
 
    obj1 = { 
 
    key1: "val1", 
 
    key2: "val2", 
 
    key3: "val3" 
 
    }, 
 
    obj2 = { 
 
    key3: "val3" 
 
    }, 
 
    obj3 = { 
 
    key1: "val4", 
 
    key2: "val5", 
 
    key3: "val1", 
 
    key4: "val8" 
 
    }, 
 
    obj4 = { 
 
    key1: "val6", 
 
    key2: "val7" 
 
    } 
 
]; 
 

 
console.log(fillMissingKeys(arr))

+0

投稿を編集していましたが、あなたの答えを見て、本当に、それは私が探していたものです! Object.assign'を完全に忘れました。 – nehel

1

代わりのオブジェクトが持つことができるキーをgussing、あなたは、動的オブジェクトのキーを介して取得またはループするObject.keysまたはfor...inループを使用することができます。このように:オブジェクトが持つキーのみを使用し、またはであってもなくてもよい事前に定義された静的なキーのセットを使用しない安全かつ動的にすることができます上記の2つの方法を使用して

var obj = { 
 
    "key1": 2, 
 
    "key2": 3, 
 
    "key-unknown": 5 
 
} 
 

 
console.log("METHOD 1:"); 
 
var keys = Object.keys(obj); 
 
console.log("obj has these keys: ", keys); 
 

 
console.log("\nMETHOD 2:"); 
 
for(var key in obj) { 
 
    console.log("'" + key + "' is a key"); 
 
}

オブジェクトとそのオブジェクトが実際に持っているものよりも少なくなる可能性があります。

関連する問題