Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 如何在JS中索引或缓存排序?_Javascript_Sorting - Fatal编程技术网

Javascript 如何在JS中索引或缓存排序?

Javascript 如何在JS中索引或缓存排序?,javascript,sorting,Javascript,Sorting,我有一个包含大量数据的大型VueJS应用程序。不同的视图对对象数组执行不同的操作。我创建了基本的查找数组,以便在各种对象数组中查找object.id。我现在要做的是根据一个或多个字段创建对象ID的排序数组。例如,更新了。我想我把这个复杂化了。我希望有这样的东西: let indexedByUpdatedAt = {} objects.sort((a,b) => new Date(a.updated_at) - new Date(b.updated_at)) .forEach((obj

我有一个包含大量数据的大型VueJS应用程序。不同的视图对对象数组执行不同的操作。我创建了基本的查找数组,以便在各种对象数组中查找object.id。我现在要做的是根据一个或多个字段创建对象ID的排序数组。例如,更新了。我想我把这个复杂化了。我希望有这样的东西:

let indexedByUpdatedAt = {}
objects.sort((a,b) => new Date(a.updated_at) - new Date(b.updated_at))
   .forEach((object) => { 
       indexedByUpdatedAt[object.updated_at] = object.id
})  
当新数据进来时,我必须更新数组,但99%的时间里新数据都可以被推送到或转移到数组中,这样我就不必重新索引所有数据。即使在插入数组中间的情况下,我也可以遍历一个值而不是完全重新检查数组。坏主意,对吧



我不认为我了解了全部情况,但似乎您可能试图依赖对象键的排序顺序,但对象通常是按插入顺序排序的(,因为JavaScript)

相反,您可以尝试按ID保存一个记录存储,以及一个单独的记录ID数组,并根据需要进行排序

const store=records.reduce((数据,记录)=>{
数据[record.id]=记录
返回数据
}, {})
const collation=records.sort(…).map(record=>record.id)
//查一条记录
商店[某物]
//获取所有记录,进行排序
collation.map(id=>store[id])
//按排序顺序获取前3条记录
collation.slice(0,3).map(id=>store[id])
//在索引42处添加新记录
存储区[newRecord.id]=newRecord
collation.splice(42,0,newRecord.id)

您只需将
对象
分配到某个地方的某个变量,并且仅在插入达到特定复杂性时进行排序。这并不是超级困难,但它确实看起来像是过度工程化,除非它的性能至关重要,并且它的特性已经被描述。也就是说,如果你想继续下去,你可以创建一个类来管理你的收藏,这样对消费者来说就更不透明了。谢谢!我试图减少浏览器中重复数据的数量。因此,较小的索引似乎更好。你能告诉我更多关于课堂的想法吗?我已经在Vuex中使用模块并在那里存储东西了,但我认为您建议使用Class.SortBy(“随便什么”)之类的东西,然后检查索引是否存在,或者只是排序?是的,或多或少。由于索引的任何变化都必须通过堆来完成,因此只需将这些内容包装到一个对象中,就可以省去一些麻烦。有点像,真的很酷。我的TS很弱,但你用的是指针吗?我假设这就是*[Symbol.iterator]()是什么?或者这在TS中是可以访问的一些基本级别的东西吗?这是一个生成器语法,它是JavaScript的一部分。它使类具有可移植性,因此您可以使用普通的迭代功能,例如spread、for of和任何可以处理可移植性的函数/util,例如lodash。是的,这正是我使用不同语法所做的。不过我喜欢你的名字。当插入到排序规则中时,我想我会遍历排序规则,直到找到条目应该插入的位置并将其拼接到那里。否则,我想我们的代码几乎是一样的。哇,我只是在地图上读到的。TYVM的警告链接。所以似乎使用对象只是默认的,但什么时候更可取呢?还有,地图可以将对象作为关键点?!?!这太神奇了。这可能是我的金票的一部分。。。