让 array.push 无所事事

Getting a array.push to do nothing

试图找出一种方法,如果我的循环结果等于未定义,让我的 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] 

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

如果你有一个奇数,这是不确定的,因为 second.lengthbarcodes 的一半小。因此,如果 barcodes.length == 11,则第二次推送是在 second.length == 5 时推送 second[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% 确定您的最终目标是什么所以我不确定这是否完全回答了问题

您可以使用 barcode 数组并为推送的第二个值取一个偏移量。

长度的调整保持相同的元素组,只在末尾添加一个undefined

Examples:

given

barcode 0 1 2 3 4 5 6 7 8
first   0 1 2 3 4
second  5 6 7 8

result

0 5   1 6   2 7   3 8   4 undefined

given

barcode 0 1 2 3 4 5 6 7 8 9
first   0 1 2 3 4
second  5 6 7 8 9

result

0 5   1 6   2 7   3 8   4 9

var barcodes = [0, 1, 2, 3, 4, 5, 6, 7, 8],
    result = [],
    i,
    l = (barcodes.length + 1) >> 1;

for (var i = 0; i < l; i++) {
    result.push(barcodes[i], barcodes[i + l]);
}

console.log(result);