我最近接受了一次采访,其中有人指出我做了一些令人反感的选择,例如将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];
}
}
可以理解,我本可以用空字符串启动数组,但这被严格指出是一个值得怀疑的选择。有谁知道为什么或什么?
答案 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));
}