以下函式從兩個陣列創建一個 Map 物件。我正在嘗試使用 sort 方法按鍵將地圖排序為新的 Map 物件,如 Mozilla Docs 所示。除了將第一個鍵放在最后一個索引這一事實之外,mapSort 物件正確地對所有鍵進行了排序。
const sortMapByKey = () => {
const keyArray = [4, 6, 16, 18, 2]
const valueArray = [103, 123, 4444, 2000]
const buildMap = (keys, values) => {
const map = new Map();
let objectArray = []
for(let i = 0; i < keys.length; i ){
map.set(keys[i], values[i]);
};
const mapSort = new Map([...map.entries()].sort(function(a, b) {
return a - b;
}));
return mapSort
};
return buildMap(keyArray, valueArray)
}
當前輸出:
Map { 4 => '103', 6 => '123', 16 => '4444', 18 => '99', 2 => '2000' }
所需的輸出:
Map { 2 => '2000', 4 => '103', 6 => '123', 16 => '4444', 18 => '99' }
關于我做錯了什么的任何線索?
uj5u.com熱心網友回復:
這些條目是一個鍵值對,例如[1, 103]。Doingreturn a - b嘗試將兩個這樣的陣列相互減去,這是沒有意義的 - 您需要先從條目對中提取密鑰。
const mapSort = new Map([...map.entries()].sort(function(entryA, entryB) {
return entryA[0] - entryB[0];
}));
顯示代碼片段
const keyArray = [4, 6, 16, 18, 2]
const valueArray = [103, 123, 4444, 2000]
const buildMap = (keys, values) => {
const map = new Map();
let objectArray = []
for (let i = 0; i < keys.length; i ) {
map.set(keys[i], values[i]);
};
const mapSort = new Map([...map.entries()].sort(function(entryA, entryB) {
return entryA[0] - entryB[0];
}));
return mapSort
};
console.log(buildMap(keyArray, valueArray));
或解構:
const mapSort = new Map(
[...map.entries()]
.sort(([a], [b]) => a - b)
);
顯示代碼片段
const keyArray = [4, 6, 16, 18, 2]
const valueArray = [103, 123, 4444, 2000]
const buildMap = (keys, values) => {
const map = new Map();
let objectArray = []
for (let i = 0; i < keys.length; i ) {
map.set(keys[i], values[i]);
};
const mapSort = new Map(
[...map.entries()]
.sort(([a], [b]) => a - b)
);
return mapSort
};
console.log(buildMap(keyArray, valueArray));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/369792.html
標籤:javascript 数组 排序
上一篇:輸出顯示為null(Ruby)
