将JavaScript数组初始化为NULL

时间:2015-11-19 19:01:26

标签: javascript arrays

我最近接受了一次采访,其中有人指出我做了一些令人反感的选择,例如将javascript数组初始化为空值,这是一个需要固定大小的多维数组的项目,只能放置两个值在其中取决于用户的行为。值的类型为string。

所以我发起了这样一个数组:

arr: [null, null, null, null, null],

initialize: function() {
 for (var i = 0 ; i < arr.length; i++) {
    arr[i] = [null, null, null, null, null];
 }

}

可以理解,我本可以用空字符串启动数组,但这被严格指出是一个值得怀疑的选择。有谁知道为什么或什么?

4 个答案:

答案 0 :(得分:1)

鉴于2D阵列中每个项目只有2个潜在值,如果您实际上初始化整个2D阵列,则将避免分配额外的内存,因为JS阵列本质上是哈希(这里有很好的解释:https://stackoverflow.com/a/20323491/2611078)。

初始化数组:

var arr = [];

然后,在用户操作后更新项目:

 if (!arr[i]) { 
     arr[i] = [];
 }
 arr[i][j] = true;

然后,检查数组时:

if (arr[i] && arr[i][j]) {
    console.log('value');
} else {
    console.log('other (default) value');
}

答案 1 :(得分:0)

有关此主题的讨论,请参阅How do you easily create empty matrices javascript?

我会说面试官是对的:你不需要所有的空位。

arr: [null, null, null, null, null],

为此,arr: Array(5)没问题。或者,你可以炫耀并做[,,,,,]

initialize: function() {
  for (var i = 0 ; i < arr.length; i++) {
    arr[i] = [null, null, null, null, null];
 }

为此,arr[i] = Array(5)也没问题。

你只是装出了二维数组的尺寸;为什么要放入所有空值?绝对不是空字符串 - 这会让你更快地从面试中解脱出来。

答案 2 :(得分:-1)

首先,我说在JavaScript中初始化数组非常奇怪,您可以根据需要设置值。阵列根据需要增长。

但是如果你想这样做,我可以看到使用空字符串初始化的主要原因是orange->foodCompanies = malloc(sizeof(char*))// array holds one entry orange->foodCompanies[0] = strdup(foodCompany); s你正在创建一个混合类型数组,这可能会在大多数情况下受到影响JS引擎今天。但实际上这只会在一个非常热门的函数中被注意到,这意味着它已经使用了很多。

这取决于您希望如何使用结果,如果有空字符串,以后使用该数组可能更简单,您可以将值混合到字符串中而不检查null。

答案 3 :(得分:-1)

如果它是一个固定大小的数组(你提前知道)为什么不用类型适当的零值来编写数组文字呢?

// 5 x 5
function init() {
    return [
      [0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0],
    ];
}

// Or using new Array
function init() {
    return new Array(5).fill(new Array(5));
}