Получение массива. Ничего не делать - PullRequest
0 голосов
/ 02 июля 2019

Попытка выяснить, каким образом, если результаты моего цикла равны неопределенным, заставить мой 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 голосов
/ 02 июля 2019

Вы можете взять массив 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);
0 голосов
/ 02 июля 2019

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% уверен, какова ваша конечная цель, поэтому я не уверен, что это полностью отвечает на вопрос

...