【问题标题】:Sorting vs if else if in javascript which one to choose?排序与 if else if 在javascript中选择哪一个?
【发布时间】:2019-06-24 22:13:57
【问题描述】:

我有一个场景,我需要按索引号的递增顺序显示数据。

myArray = [
{custom_carousel: false, default_label: "SmartCards", index: 3, visible: true}, 
{custom_carousel: false, default_label: "Pathways", index: 2, visible: false},
{custom_carousel: false, default_label: "Pathways", index: 1, visible: false},
{custom_carousel: false, default_label: "Pathways", index: 0, visible: false}
]

我应该先对数组进行排序还是添加 if else if 条件?

if(index === 0){

}else if (index === 1){

}else if (index === 2){

}else if (index === 3){

}

【问题讨论】:

  • .sort 显然。如果您的数组中有更多项目怎么办?你会去更改代码并在每次发生这种情况时添加更多ifs 吗? “2 次或更多?做一个循环。”
  • 只需使用 myArray.sort((a,b) => a.index - b.index) 并循环访问它们以获取您需要的任何内容。
  • 我在上面发表了评论,但再次阅读我有点困惑。您将如何使用if/else 进行排序?
  • @adiga 这不是一个重复的问题。我需要知道应该首选哪一个。

标签: javascript arrays sorting if-statement


【解决方案1】:

您可以使用基于index 值的sort 方法:

myArray = [
{custom_carousel: false, default_label: "Pathways", index: 2, visible: false},
{custom_carousel: false, default_label: "SmartCards", index: 3, visible: true}, 
{custom_carousel: false, default_label: "Pathways", index: 1, visible: false},
{custom_carousel: false, default_label: "Pathways", index: 0, visible: false}
]
console.log(myArray.sort((a,b)=>a.index - b.index));

【讨论】:

    【解决方案2】:
    myArray.sort(function(a, b){return a.index - b.index});
    

    将按索引对数组进行排序

    【讨论】:

      【解决方案3】:

      排序需要 O(n+log(n)) 时间,if-else-if-else 需要 O(n2) 时间。所以排序是更好的选择。

      【讨论】:

      • 我不是-1,但为什么复杂性在这里甚至是一个问题?
      • 作者问他们必须选择哪一个。我给出一个原因。
      【解决方案4】:

      我建议提前对数组进行排序,然后通过数组的索引来访问。

      原因

      • 数组的更多元素易于维护
      • 按想要的顺序轻松访问
      • 代码即容易理解,而不是有一些代码,原因不明显,需要解释
      • 访问速度很快,而不是总是从头开始迭代数组以获取下一项。

      var myArray = [{ custom_carousel: false, default_label: "SmartCards", index: 3, visible: true }, { custom_carousel: false, default_label: "Pathways", index: 2, visible: false }, { custom_carousel: false, default_label: "Pathways", index: 1, visible: false }, { custom_carousel: false, default_label: "Pathways", index: 0, visible: false }]
      
      myArray.sort(({ index: a }, { index: b }) => a - b);
      
      console.log(myArray);

      【讨论】:

        猜你喜欢
        • 2011-02-24
        • 1970-01-01
        • 2020-10-25
        • 2013-08-10
        • 2015-05-16
        • 1970-01-01
        • 2017-08-29
        • 2011-03-15
        相关资源
        最近更新 更多