Удалить все элементы в массиве - функция добавляет 'undefined' в конец массива - PullRequest
0 голосов
/ 16 ноября 2018


Вот мой код

var x = [];

function random(min,max) {
  return Math.floor(Math.random() * (min-max))+min;
}
function random2(a, b) {
  for (let i = 0; i < a; i++) {
    x.push(random(0,b));
  }
}
random2(5, 100);
console.log(x); // [ -43, -27, -38, -21, -79 ]

x.splice(0, x.length);
x.push(random2(5,100));
console.log(x); // [ -24, -97, -99, -43, -66, undefined ]

Я просто хочу удалить все элементы в массиве, а затем добавить в него новые элементы.Но когда я пытаюсь сделать это с кодом выше, undefined также добавляет в массив.
Как я могу предотвратить это?

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Вам не нужно очищать вызов функции, который возвращает undefined, а просто вызывать функцию random2, потому что функция itselft добавляет элементы в массив.

function random(min, max) {
    return Math.floor(Math.random() * (min - max)) + min;
}

function random2(a, b) {
    for (let i = 0; i < a; i++) {
        x.push(random(0, b));
    }
}

var x = [];

random2(5, 100);
console.log(x);

x.length = 0;          // better performance than x.splice(0, x.length)
random2(5,100);        // call without using push
console.log(x);        // no undefined anymore

Лучший подход - вернуть массив в random2, поскольку эта функция не обращается к внешнему определенному массиву.Чтобы выдвинуть значения, вы можете использовать синтаксис разброса.

function random(min, max) {
    return Math.floor(Math.random() * (min - max)) + min;
}

function random2(a, b) {
    return Array.from({ length: a }, _ => random(0, b));
}

var x = random2(5, 100);
console.log(x);

x.length = 0;          
x.push(...random2(5, 100));
console.log(x);
0 голосов
/ 16 ноября 2018

Чтобы очистить массив, есть несколько способов, как объяснено здесь с некоторыми результатами тестов и объяснением их производительности.

Как совокупность, предположим, var a = [1,2,3,4,5]

  1. a = []
  2. a.length = 0
  3. a.splice(0, a.length)
  4. a = new Array()
  5. while(a.pop()){}
  6. while(a.shift()){}

Вы вызвали функцию random2 внутри метода push. Поэтому метод random2 сначала вставляет значения в массив x и возвращает значение по умолчанию undefined ( Reference ), которое, в свою очередь, помещается в массив. Отсюда и значение.

0 голосов
/ 16 ноября 2018

Установить длину на ноль

x.length = 0;
...