【问题标题】:Sort a 2D JavaScript array based on three columns which contain undefined values根据包含未定义值的三列对 2D JavaScript 数组进行排序
【发布时间】:2021-01-04 18:16:57
【问题描述】:

我正在尝试在 Google Apps 脚本中的数组中排序三列。我知道有很多解释,但我不明白。我希望有人可以解决下面的代码截图。

所需功能:使用“列”8、9、10(文本和空值)按顺序对数组进行排序。

问题:空值似乎没有正确排序。

代码sn-p:

shdv.sort(function(a,b){
  var so = -1
a[10]>b[10] ? so=1 : null; // section
a[10] == b[10] && (a[9]>b[9] || a[9] == '') ? so=1 : null;
a[10] == b[10] && a[9]==b[9] && a[8]>a[9] ? so=1 : null;
null;
})

示例结果

[Not Tracking, Site, 2.85208117E8]
[Not Tracking, , 2.83812926E8]
[Not Tracking, , 2.83991529E8]
[Not Tracking, Site, 2.83812602E8]

想要的结果

[Not Tracking, Site, 2.85208117E8]
[Not Tracking, Site, 2.83812602E8]
[Not Tracking, , 2.83812926E8]
[Not Tracking, , 2.83991529E8]

【问题讨论】:

  • 提供minimal reproducible example。您的排序功能有拼写错误并且不返回任何内容。还提供shdv的示例值
  • 你不能用range.sort([{column:8,ascending:true},{column:9,ascending:true},{column:10,ascending:true}])Example here
  • 代码中的错字已修复...
  • @Cooper - 谢谢,但这仅适用于数组/没有电子表格调用来解决此问题。

标签: javascript arrays sorting google-apps-script


【解决方案1】:

说明:

  • 您正在尝试根据数组中的undefined 值进行排序。

  • 你可以像这样直接比较元素:a[1]==undefined,b[1]==undefined;

代码 sn-p:

  const shdv = [
    ["Not Tracking", "Site", 2.85208117E8],
    ["Not Tracking", , 2.83812926E8],
    ["Not Tracking", , 2.83991529E8],
    ["Not Tracking", "Site", 2.83812602E8]
    ];
  
  shdv.sort( (a,b) => 
            // if same sort equally
            a[1]==b[1]?0:
            //if nulls put them in the bottom
            a[1]==undefined?1: 
            b[1]==undefined?-1:
            //sort based on 1st and 3rd element
            a[0].charCodeAt(0)-b[0].charCodeAt(0) || a[2]<b[2]  );
  console.log(shdv);

GAS 中的console.log(shdv) 返回预期结果:

参考资料:

Array.prototype.sort()

【讨论】:

  • 只做 a[1]==undefined?1: 而不是 ?1:null; 有什么潜在的问题吗?完整的论点和线路关闭似乎是必要的。文档是否说明所有这些都是可选的?
  • 不确定您的意思,但如果它适合您,您可以尝试一下。但是,我更喜欢结构化(完整)代码,因此它易于解释、维护和理解。如果更少的代码适合你,那么请随意。但我认为在这种情况下这样做不会获得更多性能。 @JasonTorpy 如果它解决了您的问题,请随时接受答案。
【解决方案2】:

修复是在末尾添加

return so;

所以排序实际上看到了结果。 但我对如何更好地做到这一点的任何建议感兴趣(仅数组/无电子表格调用)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2021-12-15
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    相关资源
    最近更新 更多