2017-09-20 17 views
2

このJavaScriptに関する質問です。 は、単に我々がマップを持っていると我々は、最も効果的かつ効率的であるアプローチ JSオブジェクトの配列対JSオブジェクトの効率的で効率的な配列

var dataMap=new Map(); 

//First Mechanism 
//firstly we can think of structure of values of map can be JSONArray of objects 
dataMap.set("key1",[{'id':12,'name':"obj1"}]); // init 
// and,then insert new element to JSON Array which holds by map using 'key1' 
dataMap.get("key1").push({'id':23,'name':"obj47"});//updated, now value of 'key1' is an JSON array which holds two elements 
// expect 'key1' -> [{'id':12,'name':"obj1"},{'id':23,'name':"obj47"}]   

//Second mechanism 
// next we cant think of structure of values of map as JSONObject of Arrays 
dataMap.set("key1",{'id':[12],'name':["obj1"]}); // init 
// then we proceed with update operations like this 
dataMap.get("key1").id.push(23); 
dataMap.get("key1").name.push("obj47"); // two operations to insert items to respective arrays. 
// expect 'key1' ->{'id':[12,23],'name':["obj1","obj47"]} 

次のように項目を挿入と思いますか?

地図にかなりの量の挿入操作があると思いますが、パフォーマンスが優れていれば良いですか?

(間違えてしまった場合は、修正してください。可能な限り質問を簡略化したいのですが) ありがとうございます。

+4

どちらの方法でも出力が異なるため、後でどのようにこのアレイを使用するかによって異なります。 – gurvinder372

+0

@ gurvinder372これは私が以前考えたことです。しかし、各アプローチのパフォーマンスをどのように決定するのですか? – Buddhika

+0

@Buddhika:パフォーマンスは問題ではありません。それはあなたにとって使いやすいものに依存します。そしてそれは___Primarily Opinion-Basedです.____ – Cerbrus

答えて

0

ちょうど好奇心のために、私は先に進み、console.time()を使用して結果をベンチマークしました。

操作の所要時間をトラッキングするために使用できるタイマーを開始します。 各タイマーに一意の名前を付け、与えられたページで実行中のタイマ を最大10,000個まで持つことができます。同じ の名前でconsole.timeEnd()を呼び出すと、ブラウザはタイマーの開始後に経過した時間(ミリ秒単位)を出力します( )。

今、あなたはその結果を検討しているか、信頼性について議論することができ、ブラウザのキャッシュとして関与する他の要因があるなど

これらの結果は、私のマシンで操作のための*です。

Chrome Version 61.0.3163.91 (Official Build) (64-bit) 

// 1st run 
default: 2217.048095703125ms 
default: 3032.159912109375ms 
// 2nd run 
default: 1948.16796875ms 
default: 3320.7431640625ms 
// 3rd run 
default: 2177.461181640625ms 
default: 2989.448974609375ms 


Firefox 55.0.3 (32-bit) 

// 1st run 
default: 2146.64ms 
default: 2390.11ms 
// 2nd run 
default: 1863.7ms 
default: 2264.02ms 
// 3rd run 
default: 1751.7ms 
default: 2283.6ms 

あなたはその違いがそれほど大きくなく、あなたの決定に影響を与えるべきではないことがわかります。 @Nina Scholzは、あなたの人生を楽にしてくれるデータ構造を選択することに非常に正しく言及しました。

let dataMap = new Map(); 
const diff = 1000000; 
let key = null; 

console.time(); 
for(let i = 0; i < 1000000; i++){ 
    key = `key${i}`; 
    dataMap.set(key, [{'id': i, 'name': `obj${i}`}]); 
    dataMap.get(key).push({'id': i + diff, 'name': `obj${i + diff}`}) 
} 
console.timeEnd(); 

dataMap = new Map(); 

console.time(); 
for(let i = 0; i < 1000000; i++){ 
    key = `key${i}`; 
    dataMap.set(key, {'id':[i], 'name': [`obj${i}`]}); 
    dataMap.get(key).id.push(i + diff); 
    dataMap.get(key).name.push(`obj${i + diff}`); 
} 
console.timeEnd(); 

それともonlineを試してみてください。

は、[*]コードは、参考として、ベンチマークで使用しました。

+0

だから、基本的には、「あなたにとって最も簡単なものを使用してください」_は、典型的な「主に意見に基づいた」答えです。 – Cerbrus

+0

@Cerbrus私はこれらのデータがどのように使用されるのかわからないので、この質問はそれ以外の方法では十分な情報を提供していないと思います。 –

+0

なぜ、あなたは正しく答えられない質問に答えましたか? – Cerbrus

関連する問題