Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按更新/插入顺序排序的Javascript映射_Javascript_Object_Maps - Fatal编程技术网

按更新/插入顺序排序的Javascript映射

按更新/插入顺序排序的Javascript映射,javascript,object,maps,Javascript,Object,Maps,在javascript中,是否有跟踪插入/更新顺序的数据结构? 例如,如果您有: map[a]=1 map[b]=2 map[c]=3 我想把钥匙按a、b、c顺序拿 但是如果我有 map[a]=1 map[b]=2 map[c]=3 map[b]=4 我希望钥匙的顺序是a、c、b,因为b是上次更新的 我目前正在使用一个js对象和一个排序列表来跟踪更新顺序。有更好的方法吗?您可以创建一个带有陷阱的对象。使用集跟踪对象中的所有关键点。每次设置属性时,都可以在添加键之前从集中删除该键。这确保了刚更

在javascript中,是否有跟踪插入/更新顺序的数据结构? 例如,如果您有:

map[a]=1
map[b]=2
map[c]=3
我想把钥匙按a、b、c顺序拿 但是如果我有

map[a]=1
map[b]=2
map[c]=3
map[b]=4
我希望钥匙的顺序是a、c、b,因为b是上次更新的

我目前正在使用一个js对象和一个排序列表来跟踪更新顺序。有更好的方法吗?

您可以创建一个带有陷阱的对象。使用
跟踪对象中的所有关键点。每次设置属性时,都可以在添加键之前从集中删除该键。这确保了刚更新的密钥始终在最后枚举

之所以使用A,是因为类似整数的键位于字符串键之前,而与插入顺序无关。集合将保持插入顺序。按照@kaido的建议,您可以添加一个陷阱。当请求对象的键时,将从集合中返回,并且键将按照集合的顺序返回

constcreatehandler=(key=newset)=>({
设置(对象、道具、值){
键。删除(道具);
键。添加(道具);
返回Reflect.set(…参数)
},
ownKeys(obj){
返回数组。从(键)
}
})
const map=新代理({},createHandler())
map.a=1,
map.b=2;
map[1]=“类似整数的键”
console.log(Object.keys(map))
map.c=3;
图b=5
console.log(Object.keys(map))
您可以创建一个带有陷阱的对象。使用
跟踪对象中的所有关键点。每次设置属性时,都可以在添加键之前从集中删除该键。这确保了刚更新的密钥始终在最后枚举

之所以使用A,是因为类似整数的键位于字符串键之前,而与插入顺序无关。集合将保持插入顺序。按照@kaido的建议,您可以添加一个陷阱。当请求对象的键时,将从集合中返回,并且键将按照集合的顺序返回

constcreatehandler=(key=newset)=>({
设置(对象、道具、值){
键。删除(道具);
键。添加(道具);
返回Reflect.set(…参数)
},
ownKeys(obj){
返回数组。从(键)
}
})
const map=新代理({},createHandler())
map.a=1,
map.b=2;
map[1]=“类似整数的键”
console.log(Object.keys(map))
map.c=3;
图b=5

console.log(Object.keys(map))
我不认为有什么现成的东西,所以最好的方法可能是请求谷歌或者像现在这样自己做!你有实际问题吗?如果是这样的话,添加a,否则征求意见(“有更好的方法吗”)是离题的。因此,b排在c之前,而不是a,因为它是上次更新的。但a,b,c的初始插入并没有将c放在b之前,因为它是最后一次插入的。你的描述不清楚。正因为如此,我投票决定关闭。请尝试给出一个需要解决的问题的实际用例。人为的例子很少有帮助。你所描述的最接近的实现是一个链表。我不认为有什么现成的东西,所以最好的方法可能是向谷歌询问,或者像你现在这样自己做!你有实际问题吗?如果是这样的话,添加a,否则征求意见(“有更好的方法吗”)是离题的。因此,b排在c之前,而不是a,因为它是上次更新的。但a,b,c的初始插入并没有将c放在b之前,因为它是最后一次插入的。你的描述不清楚。正因为如此,我投票决定关闭。请尝试给出一个需要解决的问题的实际用例。人为的例子很少有帮助。您所描述的最接近的实现是链表。我认为使用
ownKeys
您也可以处理数字键:@kaido谢谢,我已经更新了答案。我添加了一个工厂函数来创建处理程序,以避免污染范围,并使创建多个此类对象变得容易。我认为使用
ownKeys
还可以处理数字键:@kaido谢谢,我已经更新了答案。我添加了一个工厂函数来创建处理程序,以避免污染范围,并使创建多个此类对象变得容易。