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