代码之家  ›  专栏  ›  技术社区  ›  Assaf

javascript-解决数组拆分问题的更好方法

  •  1
  • Assaf  · 技术社区  · 6 年前

    我要解决的问题是-

    splitEven(a) _ 包含位于原始索引偶数索引中的值的数组 数组,按升序排序。 例如,如果函数获取数组 [3, 1, 6, 7, 4] 它将返回数组 [3, 4, 6]

    这是我的解决方案-

        function splitEven(a){
        var b = [];
        var even = function(element){
            return element % 2 === 0;
        }
        for (var i = 0; i < a.length; i++) {
            var c = even(a[i]);
            if (c) {
                b.push(a[i])
            }
        }
        return b;
    }
    

    然而,我觉得做我所做的并不是最佳实践。我熟悉Java,我认为我倾向于用正确的方式解决问题。

    你能想出一个更好的方法来解决这个问题吗,来改进我的做法?

    3 回复  |  直到 6 年前
        1
  •  6
  •   CertainPerformance    6 年前

    你可以使用 filter 创建一个数组,该数组只包含原始数组中的偶数索引,然后 sort() 数组:

    const splitEven = arr => arr
      .filter((_, i) => i % 2 === 0)
      .sort((a, b) => a - b);
    
    console.log(
      splitEven([3, 1, 6, 7, 4])
    );
    console.log(
      splitEven([3, 1, 6, 7, 4, 11, 12])
    );
        2
  •  1
  •   Ivar    6 年前

    简化代码的另一种方法是使用 IF 嵌套在您的 FOR 循环。

    function splitEven(array) {
      var even = [];
    
      for (let i = 0; i < array.length; i++) {
        if (array[i] % 2 == 0) {
          even.push(array[i]);
        }
      }
      return even;
    }
    
        3
  •  1
  •   Geshode    6 年前

    你只需增加2而不是1,最终使用 sort() .

    function splitEven(array){
        var b = [];
        for (i = 0; i < array.length; i += 2){
          b.push(array[i]);
        }
    
        b.sort((a,b) => {return a-b;});
    
        return b;
    }