如何在javascript中初始化字符串数组(大小< 100项),其索引分散在整个整数范围内,包含数据项。
如果我喜欢这样:
array1 = ["string1","string2","string3","string4"];
然后我得到长度为4的数组,索引范围为0到3
但在我的情况下,我想保留自己的索引,以便可以像使用高性能的int-string哈希表一样使用该数组。
我最好注意单个语句初始化。
数组的项目应该是这样的:array1[23454]
我限制将数组初始化为单个语句,因为动态准备的数组初始化字符串是从服务器端追加的,如下所示:var array = <string from server here>
答案 0 :(得分:2)
要创建具有一定数量索引的数组,您可以使用
// Creates an array with 12 indexes
var myArray = new Array(12);
由于数组的工作方式,javascript中不需要这样做。数组没有上限。如果您尝试在数组中引用不存在的项索引,则返回undefined
但不会引发错误
要创建具有已删除索引的数组,您可以使用array['index'] = value
之类的内容,但这会强制您使用多个语句。 Javascript没有数组initalizer,允许您在单个语句中指定索引和值,尽管您可以创建一个函数来执行此操作
function indexArray(param) {
var a = [], i;
for (i=0; i<param.length; i+=1) {
a[param[i].index] = param[i].value;
}
return a;
}
var myArray = indexArray([
{ index: 123456, value : "bananas" },
{ index: 12, value : "grapes" },
{ index: 564, value : "monkeys" }
]);
答案 1 :(得分:2)
var array1 = []
array1[23454] = 2
这样做应该没问题。 javascript的设置数组大小与java的方式不同。
如果你真的想在一个语句中完成所有这些,你可以改为创建一个对象:
var object1 = {
"23454":2,
"123":1,
"50":3
};
然后检索这样的数字:
object1["23454"] //2
我不是真的推荐这个。数组方法是一种更简洁的方法,即使它需要多行,因为它不需要字符串转换。我不太清楚如何在浏览器中实现这些内容以评论性能影响。
由于1行需求基于传递给服务器的内容,我建议将JSON对象以下列形式传递给服务器:
"{"23454":2,"123":1,"50":3}"
然后这段代码会将它解析为一个对象:
var object1 = JSON.parse(jsonstringfromserver);
如果您愿意,可以通过枚举for for循环来将其转换为数组:
var array1 = []
for ( num in object1){
array1[num] = object1[num];
这可能是不必要的,因为object1 [123]已经返回1.如果你计划进行特定于数组的操作,你只需要这个。
答案 2 :(得分:1)
在分配数组之前,不必预先定义数组的大小。例如:
var _array = [];
_array[0] = "foo";
_array[1000] = "bar"; // _array.length => 1001
_array[1] //undefined
在分配数组元素之前,无需初始化适当数量的数组元素。
已经指出您可以使用对象而不是数组。但是,如果您想利用数组方法,那么这仍然是可能的。让我举个例子:
var obj = {
0: 15,
1: 10,
2: 5,
length: 3
};
如果对象包含长度属性,则可以将其视为类似于数组的对象。虽然不能直接从这些对象调用数组方法,但可以使用数组方法。
Array.prototype.join.call( obj ); // 15,10,5
实际上,使用ECMAScript 5 map函数,您可以轻松地将上述对象转换为数组。
var _array = Array.prototype.map.call( obj, function( x ) { return x; } );
地图功能并非在所有浏览器中都存在,但如果不是,则可以使用以下功能。
Array.map = Array.map || function(a, f, thisArg) {
return Array.prototype.map.call(a, f, thisArg);
}
答案 3 :(得分:0)
您可以通过以下方式使用Object执行所需操作:
var o = {23454: 'aaaa', 23473: 'bbb'};
您将丢失数组方法/字段,例如长度,但你会得到你所说的你想要的,你将能够轻松地添加/删除成员。