Javascript 如何在可观测数据上对数据数组进行排序?
使用angular,我从API中提取数据。如果有人能给我启示,我不确定两件事: 1-我应该在可观察对象或订阅服务器上对数组进行排序,为什么 2-我不确定如何使用sort()函数根据值为真或假对数据数组进行排序 下面是我的对象的外观,如果hostname之后的任何值返回false,或者updateDate上的日期超过4周,我需要首先显示该对象。如果一切都是真的,但是日期>2周,而且<4周,我需要它排在第二位。如果对象是完全真实的,并且日期不到两周,我希望它最后一个。将有大约500个这样的Ipcidata物体通过Javascript 如何在可观测数据上对数据数组进行排序?,javascript,angular,typescript,Javascript,Angular,Typescript,使用angular,我从API中提取数据。如果有人能给我启示,我不确定两件事: 1-我应该在可观察对象或订阅服务器上对数组进行排序,为什么 2-我不确定如何使用sort()函数根据值为真或假对数据数组进行排序 下面是我的对象的外观,如果hostname之后的任何值返回false,或者updateDate上的日期超过4周,我需要首先显示该对象。如果一切都是真的,但是日期>2周,而且
export interface Ipcidata {
id: Int16Array;
hostname: string;
AMStatus: boolean;
BLStatus: boolean;
FirewallRullStatus: boolean;
FirewallContentStatus: boolean;
SCCMStatus: boolean;
MSBaselineStatus: boolean;
UpdatedDate: Date;
USBStatus: boolean;
}
这是我的observable,有一个排序函数
getPciInfo(): Observable <Ipcidata[]> {
return this.httpClient.get<Ipcidata[]>('http://localhost:499/api/PCImachines').pipe(
map(results => results.sort()
)
);
}
Array.prototype.sort()
将compareFunction
作为参数
i、 e.result.sort(排序对象)
compareFunction
背后的逻辑是它应该采用两个参数,firstElement
和secondElement
,比如a
和b
那么compareFunction应该是这样的
function compare(a, b) {
if (a is less than b by some ordering criterion) {
return -1;
}
if (a is greater than b by the ordering criterion) {
return 1;
}
// a must be equal to b
return 0;
}
-JavaScript文档1-我应该在可观察对象或订阅服务器上对数组进行排序,为什么? 一般来说,我会尽快分类。当您的数据集用于应用程序中未排序的其他位置时,可以在订阅中进行排序。否则我认为用管道分类更好。这也适用于避免订阅和使用异步管道的一般方法 2-我不确定如何使用sort()函数根据值的真假对数据数组进行排序。
见毗湿奴德夫的回答毗湿奴德夫的回答正是我所需要的。最后,我在observable上进行了排序,这根本不影响页面加载所需的时间。另外,您可以删除所有
==true
。任何真实的东西都能满足条件。@Jeremythill谢谢。当我修复这个问题时,我很快就做了。出于好奇,如果我只是检查真值或假值,为什么我需要一个“b”参数?我可以省略它,只使用“if a.property=false返回1”吗?Return似乎还改变了实际值,而不仅仅是决定首先显示哪个ICIData对象。不知道为什么会这样。基本上,我不想更改每个对象上的任何属性,但只要根据属性决定在显示数据时哪个对象首先出现。您想排序还是筛选?如果你想排序,那么你需要比较两件事,然后决定把哪一件放在哪里。我想先决定哪个IPCIData对象显示在数组中,而不是真正重新排列对象中的任何属性。对象内部的属性只是决定它们是否是最先出现的属性之一。所以我很确定我仍然想使用Sort,对吗?上面的方法不会重新排列属性,你也不能。这只是根据一些条件对IPCIData对象数组进行排序。有趣的是,当我在if语句后返回1时,它实际上会将该属性的值从0更新为1。我不想更改实际属性。我假设(从我读到的内容来看,-1、1和0意味着对对象进行排序。为什么它会改变这些值?
results.sort(function(a,b) {
if (b.AMStatus == true
&& b.BLStatus == true
&& b.FirewallRullStatus == true
&& b.FirewallContentStatus == true
&& b.SCCMStatus == true
&& b.MSBaselineStatus == true
&& b.USBStatus == true
){
return -1;
}
})));
}
function compare(a, b) {
if (a is less than b by some ordering criterion) {
return -1;
}
if (a is greater than b by the ordering criterion) {
return 1;
}
// a must be equal to b
return 0;
}