关于javascript中的数组长度

时间:2018-04-18 21:25:20

标签: 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]

4 个答案:

答案 0 :(得分:3)

您可以尝试Object.seal()。请注意,在此示例中,我没有使用push(),因为这会引发错误,但是因为固定长度数组中的值是可变的而分配值

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal

&#13;
&#13;
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;
&#13;
&#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

&#13;
&#13;
STATS_MODE
&#13;
&#13;
&#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);
}

基本上,您使用具有特定长度的未定义值设置数组,然后循环直到达到该长度。