首页 > 解决方案 > 让 array.push 什么都不做

问题描述

试图找出一种方法,如果我的循环结果等于未定义,让我的 array.push 什么都不做。这是我的代码。

  barcodes.sort();
  var first = barcodes.slice(0, (barcodes.length + 1) / 2);
  var second = barcodes.slice(((barcodes.length + 1) / 2), barcodes.length);

  var result = [];

  for (var i = 0; i < barcodes.length; i++) {
    if (i % 2 === 0) {
      result.push(first[i / 2]);
      result.push(second[parseInt(i)/2]);
    }else {

    }
  }

在奇数时得到结果:(当偶数很好时)

array results (12) ["1001", "9003", "3001", "9005", "3002", "9006", "3003", "9007", "9001", "9008", "9002", undefined] 

标签: javascriptfor-loopundefinedvoid

解决方案


result.push(second[parseInt(i)/2]);

如果您有一个奇数,则这是未定义的,因为second.length它小于 的一半barcodes。所以如果barcodes.length == 11,那第二个推就是推second[5]什么时候second.length == 5。这不存在,因为索引从 0 开始

barcodes = ["1001", "9003", "3001", "9005", "3002", "9006", "3003", "9007", "9001", "9008", "9002"];

barcodes.sort();
var first = barcodes.slice(0, (barcodes.length + 1) / 2);
var second = barcodes.slice(((barcodes.length + 1) / 2), barcodes.length);

var result = [];

for (var i = 0; i < barcodes.length; i++) {
    if (i % 2 === 0) {
        result.push(first[i / 2]);
        if(second[(i / 2)]) {
            result.push(second[(i / 2)]);
        }
    }
}

console.log(result);

您可以添加这一行:if(second[(i / 2)])以避免未定义,但我又不是 100% 确定您的最终目标是什么,所以我不确定这是否完全回答了问题


推荐阅读