删除数组中的所有元素-函数在数组末尾附加“未定义”

时间:2018-11-16 13:15:19

标签: javascript arrays push splice


这是我的代码

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 :(得分:2)

您无需惩罚返回undefined的函数调用,而只需调用函数random2,因为该函数本身会将元素添加到数组中。

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

答案 1 :(得分:1)

要清空数组,可以使用here中介绍的多种方法以及一些基准测试结果和有关其性能的说明。

作为汇总,假设 path = `M ${s.y} ${s.x} C ${(s.y + d.y) / 2} ${s.x}, ${(s.y + d.y) / 2} ${d.x}, ${d.y} ${d.x}`

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

您已经在push方法中调用了函数while(a.shift()){}。因此,random2方法首先将值插入数组random2中并返回默认值xReference),然后将其推入数组。因此价值。

答案 2 :(得分:0)

将长度设置为零

x.length = 0;