我想在javascript中创建已知长度的array (X)
。使用X.push(??)
或X[index] = ??
填充数组有什么区别?结果似乎相同,但有什么不同吗?
编辑:感谢您的回复。我可能应该更具体地查询差异。当使用X.push函数(添加到数组的末尾)时,与使用非常大的数组分配空间并仅设置索引相比,使用非常大的数组执行此操作时,内存/时间方面会出现任何问题一个值?
答案 0 :(得分:3)
在X.push()中,您无需担心索引。 push()函数将自动从索引0-n位置推送元素。 但是在X [index]中,你需要专门定义你需要将值放在数组中哪个索引的索引。
答案 1 :(得分:1)
使用X[index]= ??
每次需要分配位置索引值
在此作业X.push(??)
无需担心索引的位置。我们可以直接分配数据元素
答案 2 :(得分:1)
99%的时间将新元素添加到您使用推送的数组中。
通常你不会添加带有x [index]的元素,因为你会弄乱阵列上的自然序列。
大多数时候x [index]在你编辑或获取数组的特定元素时使用,例如。在你传递索引的函数上
//to create mask
cv :: Mat floatMask
cv::threshold( someimage , floatMask , 0 , 1 , cv ::THRESH_BINARY );
floatMask.convertTo( floatMask , cv :: CV_32F);
// now to mask image
floatImageToBeMasked = floatImageToBeMasked.mul ( floatMask ) ;
答案 3 :(得分:1)
当我们写X[index]=
时意味着我们将值设置为特定索引。
当我们写X.push(??)
时意味着我们放置没有已知位置的价值
答案 4 :(得分:1)
这取决于index
的精确值。
使用array.push(value);
时,该值将附加到数组的末尾,而不会更改数组中的其他值。结果类似于使用array[array.length] = value;
。
var X = [ 1 ];
X.push(2); // `length` becomes 2; 2 appended after 1
console.log(X); // [ 1, 2 ]
X[X.length] = 3; // `length` becomes 3; 3 appended after 2
console.log(X); // [ 1, 2, 3 ]
除此之外,array[index] = value;
为特定索引(属性)分配值,无论它是否已有值:
X[0] = 99; // `length` still 3; 1 replaced
console.log(X); // [ 99, 2, 3 ]
X[4] = 77; // `length` becomes 5; gap created at 4th
console.log(X); // [ 99, 2, 3, undefined, 77]
在任何一种情况下,阵列的length
都会根据需要增加,以便在最大的索引上保持1。
答案 5 :(得分:1)
这里有很多东西。让我们来谈谈第一个场景,即 {
"settings": {
"analysis": {
"filter": {
"ngram_filter": {
"type": "edge_ngram",
"min_gram": 3,
"max_gram": 40
}
},
"analyzer": {
"ngram_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"ngram_filter"
]
}
}
}
},
"mappings": {
"doc": {
"properties": {
"field1Suggest": {
"type": "completion",
"analyzer": "ngram_analyzer",
"search_analyzer": "whitespace"
},
"field2Suggest": {
"type": "completion",
"analyzer": "ngram_analyzer",
"search_analyzer": "whitespace"
}
}
}
}
}
在这里,你可以提到X[index] = 'something';
,它将在数组的特定索引中分配值。但这里有一个问题。例如,请考虑以下代码
index
虽然您会假设数组中只有两个元素,但它只会返回var t = ['hello'];
t[21] = ['world'];
作为长度,而是返回2
,因为它在0之间创建空数组元素到20岁。
此外,如果您传递了错误的索引,如果所述索引中有任何索引,它将覆盖该值。
如果使用.push()
,则不需要指定任何索引,如果要将元素推送到数组的末尾。它知道长度,并将新元素APPEND到数组的末尾。但是你在这里做的并不多。它总是将新元素推送到数组的末尾。同样,如果要将元素添加到数组的开头,可以使用.unshift()