在保持密钥的同时根据对象属性sorting地图

我创build了一个包含产品列表的地图,最近的商店正在销售该产品,如下所示:

var products = new Map() products.set('product_key', { shop: 'shop_key', distance: 1.2 }) 

现在我想要做的就是对距离属性上的整个地图进行sorting,这样我就可以通过靠近我的位置来列出产品。

我使用的地图,因为我也需要进入,并能够find一个特定的产品使用密钥的距离。

一种方法是有一个按距离sorting的键数组:

 "use strict"; var products = new Map() products.set('product_key', { shop: 'shop_key', distance: 1.2 }) products.set('product2_key', { shop: 'shop2_key', distance: 0.1 }) console.log(products); var keysByDistance = Array.from(products.keys()).sort((a, b) => products.get(a).distance - products.get(b).distance); console.log(keysByDistance.map(key => products.get(key))); 

输出:

 Map { 'product_key' => { shop: 'shop_key', distance: 1.2 }, 'product2_key' => { shop: 'shop2_key', distance: 0.1 } } [ { shop: 'shop2_key', distance: 0.1 }, { shop: 'shop_key', distance: 1.2 } ] 

按照插入顺序 Map循环条目; 您无法对地图进行sorting,只能按您想要的sorting顺序创build一个地图。

对于你在做什么,我可能会使用一个条目数组,然后映射string映射到数组中的条目:

 const productList = [ {distance: 1.8, product_key: "one", shop: "shop_key1"}, {distance: 1.2, product_key: "two", shop: "shop_key2"}, {distance: 1.4, product_key: "three", shop: "shop_key3"} ]; productList.sort((a, b) => a.distance - b.distance); const map = new Map(); productList.forEach(entry => { map.set(entry.product_key, entry); }); console.log("List:"); productList.forEach(entry => { console.log(JSON.stringify(entry)); }); console.log("Product 'two':", map.get("two")); 

将某些部分移动到数组,产品键和距离,然后对该数组进行sorting。 sorting后再进行查找。

 var products = { p1:300, p2:60, p3:200, p4:1000, p5:400, p6:600 } var sortable = []; for (var x in products) sortable.push([x, product[x]]) sortable.sort( function(a, b) { return a[1] - b[1] } ) //Do lookup on the map based on first elements in sorted array