Подтвердить что ты не робот

Как извлечь четные элементы массива?

var arr = [4, 5, 7, 8, 14, 45, 76];

function even(a) {
  var ar = [];

  for (var i = 0; i < a.length; i++) {
    ar.push(a[2 * i + 1]);
  }

  return ar;
}

alert(even(arr));

http://jsbin.com/unocar/2/edit

Я пробовал этот код для вывода четных (индексных) элементов массива. Он работает, но также выводит некоторые пустые элементы. Как исправить этот код для вывода только существующих элементов?

4b9b3361

Ответ 1

Использовать модуль:

for (var i = 0; i < a.length; i++) {
    if(i % 2 === 0) { // index is even
        ar.push(a[i]);
    }
}

или пропустить каждый второй элемент, увеличивая i следующим образом:

for(var i = 0; i < a.length; i += 2) {  // take every second element
    ar.push(a[i]);
}

Примечание:. В вашем коде фактически используются элементы с нечетными индексами из массива. Если это то, что вы хотите, вам нужно использовать i % 2 === 1 или запустить цикл с помощью var i = 1 соответственно.

Ответ 2

Для IE9 + используйте Array.filter

var arr = [4,5,7,8,14,45,76];
var filtered = arr.filter(function(element, index, array) {
  return (index % 2 === 0);
});

С возвратом для старых IE, все остальные браузеры в порядке без этого резервного копирования

if (!Array.prototype.filter)
{
  Array.prototype.filter = function(fun /*, thisp */)
  {
    "use strict";

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== "function")
      throw new TypeError();

    var res = [];
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in t)
      {
        var val = t[i]; // in case fun mutates this
        if (fun.call(thisp, val, i, t))
          res.push(val);
      }
    }

    return res;
  };
}

Ответ 3

Он добавит ответ eltuza:

[1,2,3,4,5].filter(function(num){ if( num % 2 ) return num;})

Ответ 4

почему бы вам не попробовать с помощью оператора%. Это дает вам оставшееся подразделение.

замените блок цикла на

if ((i % 2) === 0) {
    ar.push(a[i])
}

Ответ 5

Вам нужно проверить элементы для равномерности следующим образом:

var arr = [4,5,7,8,14,45,76];

function even(a){
  var ar = [];

  for (var i=0; i<a.length;i++){
    if (a[i] % 2 === 0)
    {
      ar.push(a[i]);
    }

  }

return ar;
}

alert(even(arr));

% 2 является модульным оператором, он возвращает остаток от целочисленного деления.

Ответ 6

var arr = [4,5,7,8,14,45,76];

function even(a)
{
  var ar = [];  

  for (x in a)
  {

    if((a[x]%2)==0)
    ar.push(a[x]);  

  }
return ar;
}

alert(even(arr));

Ответ 7

Я просто хотел объяснить, почему ваш результат не тот, который вы ожидали, поскольку все остальные показывают отличные решения. Вы выполняете итерацию по размеру массива N, чтобы ваш результирующий массив попытался вытолкнуть элементы в массиве, что приведет к размеру N. Поскольку в исходном массиве будет найден только N/2, ваш результирующий массив заполнит остальные пробелами для заполнения в остальной части N. Итак, если вы проверили, существует ли [2 * i] OR или проверено, есть ли [i]% 2 == 0 перед вставкой, ваш результирующий массив будет содержать только четные индексированные значения