限制数组大小

sup*_*per 13 javascript arrays

假设我有一个包含数据元素的数组,在此示例中为数字,如下所示:

var a = [432, 238, 122, 883, 983];
Run Code Online (Sandbox Code Playgroud)

我想限制数组,这样每次我向数组添加一个元素时,它总是保持7或更小的长度,并删除最旧的元素.

我目前的aproach看起来像这样:

function add(x) {
    a.unshift(x);
    a = a.slice(0, 7);
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是没有一种更优雅的方式来做它,比如一条线或什么的?

编辑:通过"更优雅",我的意思是,我不需要添加功能,只是很容易内联我需要它的代码,而不是输入例如三次,只有一行也会使代码"更清晰"

zer*_*kms 13

只是添加另一种可能的选择:

a = [x, ...a.slice(0, 6)];
Run Code Online (Sandbox Code Playgroud)

尽管我会亲自选择Nina Scholz解决方案(改变长度的"更好"条件以及不支持ES6的旧环境)

参考文献:


Nin*_*olz 7

只需在推动后调整长度属性即可.

function add(x) {
    a.unshift(x);
    a.length = a.length < 7 ? a.length : 7;
}
Run Code Online (Sandbox Code Playgroud)

清洁方式是先检查

function add(x) {
    a.unshift(x);
    if (a.length > 7) {
        a.length = 7;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `a.length = a.length <7?a.length:7;`---呃,这很讨厌:-) (2认同)
  • 你可以尝试a.length = Math.min(a.length,7) (2认同)