簡體   English   中英

關於JavaScript中的數組長度

[英]about array length in javascript

我可以給空數組一定的長度,那個數組只需要那么長的元素。 例如:

 var emptyArray = []; // but I need this array takes only 10 elements
 for (var i = 0; i < 50; i++) {
     emptyArray.push(i);
 }
 console.log(emptyArray.length) // I want to see 10
 console.log(emptyArray) // [0,1,2,3,4,5,6,7,8,9]

您可以嘗試Object.seal()。 請注意,在此示例中,我不使用push(),因為那樣會引發錯誤,但是由於固定長度Array中的值是可變的,所以分配值

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/seal

 var emptyArray = new Array(10).fill(0); Object.seal(emptyArray); for (var i = 0; i < 50; i++) { emptyArray[i] = i; } console.log(emptyArray.length) // I want to see 10 console.log(emptyArray) // [0,1,2,3,4,5,6,7,8,9] 

一種方法是定義自己的array並重新定義push方法。

 function MyArray() {}; MyArray.prototype = Object.create(Array.prototype); MyArray.prototype.push = function(item) { if (this.length < 10) { Array.prototype.push.call(this, item); } } const arr = new MyArray(); for (let i = 0; i < 50; i++) { arr.push(i); } console.log(arr); 

另一種方法是使用Proxy

 function limitedArray(length) { return new Proxy([], { set: (target, prop, value) => { if (Number(prop) < length) { target[prop] = value; } return true; } }); } var tenArray = limitedArray(10); for (let i = 0; i < 50; ++i) { tenArray.push(i); } console.log(Array.from(tenArray)); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

如果希望在超過數組長度時拋出錯誤,則可以使用其他set方法:

set: (target, prop, value) => {
  if(!isNaN(prop) && Number(prop) >= length){
    return false;
  }

  if (Number(prop) < length) {
    target[prop] = value;
  }

  return true;
}

但是請注意,處理元素刪除需要更多的工作。

不是直接按照您的意願,但是您可以有類似的東西:

var emptyArray = Array.from({length:50}, (v,i) => undefined);
for(let i=0; i<emptyArray;i++){
    emptyArray.push(i);
}

基本上,您可以使用一定長度的未定義值設置數組,然后循環直到達到該長度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM