【问题标题】:Getting a array.push to do nothing让 array.push 什么都不做
【发布时间】:2019-07-02 14:47:03
【问题描述】:

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

【问题讨论】:

  • 为什么还要调用push?跳过它。
  • 同意@PeterB。我看不出保留代码的 else 部分的任何正当理由
  • 请添加缺少的部分和想要的结果。
  • i 在您的示例中永远不会是 undefined
  • 在循环内部,i 永远不会是未定义的

标签: javascript for-loop undefined void


【解决方案1】:

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

【讨论】:

  • 就是这样。非常感谢
  • 别担心,朋友,很高兴为您提供帮助。
【解决方案2】:

您可以使用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);

【讨论】:

    猜你喜欢
    • 2014-02-19
    • 2011-03-24
    • 1970-01-01
    • 2019-03-08
    • 2016-12-24
    • 2017-04-18
    • 2011-08-03
    • 2014-05-11
    • 2014-09-10
    相关资源
    最近更新 更多