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

时间:2018-12-18 09:00:29

标签: javascript arrays

我要解决的问题如下-

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 个答案:

答案 0 :(得分: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])
);

答案 1 :(得分:1)

另一种简化代码的方法是使用嵌套在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;
}

答案 2 :(得分:1)

您可以增加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;
}