首页 > 解决方案 > Lightning Web 组件中的可跟踪数组排序

问题描述

使用新的 Salesforce Lightning Web 组件。我试图让多维数组在 javascript 中排序。我有一个可跟踪的数组,它有几列,我希望数据按建筑物总价值排序。这是我到目前为止所做的,没有错误,但没有得到预期的结果。

@track bc = [];
@wire(getCityStats) cityStats({ data }) {
    if (data) {
      for (let i = 0; i < data.length; i++) {
        if (data[i].sumchans__Province_Code__c == 'BC') {
          this.bc.push(data[i]);
        }
      }
      sortCityByNumberOfBldgs(this.bc);
}
}
  sortCityByNumberOfBldgs(province) {
    province.sort(function(a,b) {
      return a[4]-b[4]
    });
  } 

这是 Apex 控制器中的 SOQL:

SELECT Name,sumchans__Province_Code__c,
        (select sumchans__Penetration__c,sumchans__Total_Buildings__c from sumchans__City_Stats__r) FROM sumchans__CITY_MASTER__c

这就是我运行上述查询时数据的显示方式,这是存储在上面的可跟踪 bc 数组中的数据。 在此处输入图像描述

标签: javascriptsalesforcesalesforce-lightninglwc

解决方案


只需实现一个比较器:

compareASC(firstVal, secondVal) {
    
    if (firstVal.sumchans__City_Stats__r.sumchans__Total_Buildings__c > secondVal.sumchans__City_Stats__r.sumchans__Total_Buildings__c) return 1;
    if (secondVal.sumchans__City_Stats__r.sumchans__Total_Buildings__c > firstVal.sumchans__City_Stats__r.sumchans__Total_Buildings__c) return -1;
    return 0;
}

接着:

let toBeSorted = JSON.parse(JSON.stringify(data));
toBeSorted.sort(compareASC);  

推荐阅读