使用X.push(?)或X [index] =?

时间:2018-05-28 05:54:45

标签: javascript arrays

我想在javascript中创建已知长度的array (X)。使用X.push(??)X[index] = ??填充数组有什么区别?结果似乎相同,但有什么不同吗?

编辑:感谢您的回复。我可能应该更具体地查询差异。当使用X.push函数(添加到数组的末尾)时,与使用非常大的数组分配空间并仅设置索引相比,使用非常大的数组执行此操作时,内存/时间方面会出现任何问题一个值?

6 个答案:

答案 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()