获取array.push不执行任何操作

时间:2019-07-02 14:47:03

标签: javascript for-loop undefined void

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

2 个答案:

答案 0 :(得分:0)

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%知道您的最终目标是什么,所以我不确定这是否能完全回答问题

答案 1 :(得分:0)

您可以采用barcode数组,并为第二个要推入的值取一个偏移量。

对长度的调整将保留相同的元素组,并仅在末尾添加undefined

  

示例:

     

给予

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

结果

0 5   1 6   2 7   3 8   4 undefined
     

给予

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

结果

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);