我可以给空数组赋予一定长度,该数组只需要那么长的元素。 例如:
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]
答案 0 :(得分:3)
您可以尝试Object.seal()。请注意,在此示例中,我没有使用push(),因为这会引发错误,但是因为固定长度数组中的值是可变的而分配值
https://developer.mozilla.org/en-US/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]
&#13;
答案 1 :(得分:0)
这样做的一种方法是定义自己的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);
答案 2 :(得分:0)
另一种方法是使用Proxy:
STATS_MODE
&#13;
您可以使用不同的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
但请注意,处理元素删除需要更多工作。
答案 3 :(得分:-1)
不是你想要的,但你可以有类似的东西:
var emptyArray = Array.from({length:50}, (v,i) => undefined);
for(let i=0; i<emptyArray;i++){
emptyArray.push(i);
}
基本上,您使用具有特定长度的未定义值设置数组,然后循环直到达到该长度。