如何提取数组的偶数元素?

IT技术 javascript arrays
2021-03-14 05:49:50
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

我试过这段代码是为了输出数组的偶数(索引)元素。它有效,但它也会输出一些空元素。如何修复此代码以仅输出现有元素?

6个回答

要么使用模数:

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

从第二个元素开始: for(var i = 1;
2021-05-10 05:49:50
可能,我说错了。我的意思是元素的序数 - 例如 - 5 是第二,8 是第四......等等..
2021-05-14 05:49:50

对于 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;
  };
}

这将在 2018 年生效:)

取奇数索引并应用于过滤器

var arr = [4, 5, 7, 8, 14, 45, 76,5];
let filtered=arr.filter((a,i)=>i%2===1);
console.log(filtered);

如果数组有重复元素,这将不起作用。
2021-05-17 05:49:50

即使这个问题已经很老了,我还是想添加一个单行过滤器:
奇数:arr.filter((e,i)=>i%2)
偶数偶数的arr.filter((e,i)=>i%2-1)
一种更“合法”的方式:arr.filter((e,i)=>!(i%2))

没有必要i%2===1像 sumit 所说的那样检查由于mod 2已经返回 0 或 1 作为数字,它们可以被解释为 js 中的布尔值。

如果你愿意,你可以使用i&1代替i%2. 它可能有利于大型阵列的性能。

为什么不尝试使用 % 运算符。它给你一个师的剩余部分。

将循环块替换为

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