簡體   English   中英

一次遍歷並訪問多個地圖(JavaScript)

[英]Iterating over and accessing multiple maps at once (JavaScript)

我有各種各樣的地圖,這些地圖具有相同的鍵,但是值不同-我正嘗試沿着地圖的每個維度計算平均值。 例如,我可能有三個具有3個鍵的地圖-這個數字以及鍵的數目可能會改變。

var a = new Map ([["wordOne", 153], ["wordTwo", 24], ["wordThree", 73]]);
var b = new Map ([["wordOne", 346], ["wordTwo", 693], ["wordThree", 124]]);
var c = new Map ([["wordOne", 34], ["wordTwo", 4352], ["wordThree", 93]]);

我正在嘗試復制下面的公式,因此我可以從我選擇的3張不同的地圖中獲得該鍵的平均值

[(a_1 + b_1 + c_1)/3]
[(a_2 + b_2 + c_2)/3]
[(a_3 + b_3 + c_3)/3]

然后,我想取平均值並將其連同平均值表示的鍵一起存儲在新地圖中。

如何在JavaScript中創建一個for循環,以迭代選擇的地圖,並對所選地圖的每個值執行平均方程,然后將其存儲在具有相同鍵的新地圖中?

要獲取每個鍵的平均值,您可以先將所有地圖放在一個數組中。 這將使遍歷它們成為可能。 然后獲取其中一張地圖的所有鍵的列表,然后對其進行迭代。 假設所有地圖都具有相同的鍵。

 var a = new Map ([["wordOne", 153], ["wordTwo", 24], ["wordThree", 73]]); var b = new Map ([["wordOne", 346], ["wordTwo", 693], ["wordThree", 124]]); var c = new Map ([["wordOne", 34], ["wordTwo", 4352], ["wordThree", 93]]); // make array of maps let maps = [a, b, c]; // Average of each key across maps (ie [average_a, average_b, average_c]) // map over all keys(), then average across the maps let averages_across = [...maps[0].keys()].map(key => [key, maps.reduce((sum, map) => sum + map.get(key), 0)/maps.length]) console.log(averages_across) // make a new map from this let average_map = new Map(averages_across) 

我不確定是否可以理解,但是每次迭代訪問每個鍵的每個值可能是以下之一:

 var mapOne = new Map ([["a", 153], ["b", 24], ["c", 73]]); var mapTwo = new Map ([["a", 346], ["b", 693], ["c", 124]]); var mapThree = new Map ([["a", 34], ["b", 4352], ["c", 93]]); //each key of all maps in each iteration. a+a+a/3 b+b+b/3... etc mapThree.forEach((v,k)=>{ console.log((mapOne.get(k)+mapTwo.get(k)+v)/3) }); //the average of each map [...[mapOne],...[mapTwo],...[mapThree]].forEach(m=>{ var res = 0; mapThree.forEach((v,k)=>{// a+b+c/3 ... etc res += mapOne.get(k); }) console.log(res/3) }) 

使用原始的JavaScript和Map方法。

 var mapOne = new Map ([ ["a", 153], ["b", 24], ["c", 73] ]); var mapTwo = new Map ([ ["a", 346], ["b", 693], ["c", 124] ]); var mapThree = new Map ([ ["a", 34], ["b", 4352], ["c", 93] ]); function averageValuesKeyMaps ( ...maps ) { // Map for key => averages const averagesMap = new Map (); let // Get the first map as a reference, mapRef = maps[ 0 ], // Get the size, assuming that each map is the same size size = mapRef.size, // Get the keys, assuming that every maps have those keys keys = maps[ 0 ].keys() // For each key in keys for ( let key of keys ) { // Get the average with each value of the current key for each map let average = maps.reduce( ( acc, map ) => acc + map.get( key ), 0 ) / size; // Set the key => average averagesMap.set( key, average ); } // Return the new map of averages return averagesMap; } // Get the map of averages key values let averagesMap = averageValuesKeyMaps( mapOne, mapTwo, mapThree ); // Usage example for ( let [ key, average ] of averagesMap.entries() ) { // Do something with key or average console.log( key, average ); } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM