[英]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.