马黑黑 发表于 2022-7-2 10:52

JS:删除并改变数组元素

本帖最后由 马黑黑 于 2022-7-2 11:39 编辑

JS删除数组元素的方法很多,可以使用的内置函数不在少数,还可以利用循环语句进行迭代等等手段加以实现。但简洁且灵活的做法,莫过于使用内置函数 splice,它用途多多,删除数组元素对它而言是小儿科。欲要删除数组中的指定元素,splice 的语法如下:

    array.splice(key, );

如此,数组 array 的 number 个数组元素都被删除,删除次序从 key+1 开始,key 从 1 算起;number 参数可选,缺省时从 key+1 往后全部删除。

例如,我们有一个数组,

    numAr = ;

我们想只保留第一和第二个,则这么使用 splice :

    numAr.splice(2,); 或 numAr.splice(2);

若我们想删除第三项,则:

    numAr.splice(2,1);

注意,删除是从 key 后面的那一项,所以,删除第三项,key参数是 2 ,而不是 3。上例的第二个参数,1,表示删除一项元素,也就是删除第三项,如果 1 变为 2,则第三、四两项将被删除。

再请注意,以上方法会改变数组,亦即,删除之后被删除的数组元素及其在数组中的占位不复存在,数组长度会相应变短。

为了更好说明问题,我们将在二楼给出一个实例,该例假设水吧每周抽一次奖(感谢队长 @加林森),每次抽奖都有六名幸运者能够获得一定数额的奖金(RMB)。

马黑黑 发表于 2022-7-2 10:53

<p class="bbbox"></p>

<script>

let bbbox = document.querySelector('.bbbox');
let bonus = ;
let total = bonus.length;
let num = (min,max) => Math.floor(Math.random()*(max-min+1))+min;

arDel();

console.log(bonus);
function arDel() {
        let idx = num(0,bonus.length - 1);
        let money = bonus;
        bonus.splice(idx, 1);
        bbbox.innerHTML += total - bonus.length + ' 号奖金 : ' + money + '<br>';
        if(bonus.length == 0) {
                bbbox.innerHTML += '<br>奖金池已清空。敬请期待下一期...';
                return false;
        }
        setTimeout(() => arDel(), 1000);
}
</script>

马黑黑 发表于 2022-7-2 10:54

<p class="bbbox"></p>
<script>

let bbbox = document.querySelector('.bbbox');
let bonus = ;
let total = bonus.length;
let num = (min,max) => Math.floor(Math.random()*(max-min+1))+min;

arDel();

console.log(bonus);
function arDel() {
        let idx = num(0,bonus.length - 1);
        let money = bonus;
        bonus.splice(idx, 1);
        bbbox.innerHTML += total - bonus.length + ' 号奖金 : ' + money + '<br>';
        if(bonus.length == 0) {
                bbbox.innerHTML += '<br>奖金池已清空。敬请期待下一期...';
                return false;
        }
        setTimeout(() => arDel(), 1000);
}
</script>

加林森 发表于 2022-7-2 11:16

钱钱没有了,等待下期。。。。。{:4_189:}

马黑黑 发表于 2022-7-2 11:40

加林森 发表于 2022-7-2 11:16
钱钱没有了,等待下期。。。。。

你要出血本了

加林森 发表于 2022-7-2 11:51

马黑黑 发表于 2022-7-2 11:40
你要出血本了

可以的可以的。

马黑黑 发表于 2022-7-2 12:10

加林森 发表于 2022-7-2 11:51
可以的可以的。

为了活跃气氛哈{:5_117:}

加林森 发表于 2022-7-2 12:21

马黑黑 发表于 2022-7-2 12:10
为了活跃气氛哈

要得的。

马黑黑 发表于 2022-7-2 12:24

加林森 发表于 2022-7-2 12:21
要得的。

东篱说你钱钱多,出点血本没事{:5_117:}

加林森 发表于 2022-7-2 12:36

马黑黑 发表于 2022-7-2 12:24
东篱说你钱钱多,出点血本没事

啊????他怎么知道的?{:4_203:}

马黑黑 发表于 2022-7-2 12:38

加林森 发表于 2022-7-2 12:36
啊????他怎么知道的?

谁不知道?都惦记着呢

加林森 发表于 2022-7-2 12:48

马黑黑 发表于 2022-7-2 12:38
谁不知道?都惦记着呢

都是这样想的?

马黑黑 发表于 2022-7-2 13:11

加林森 发表于 2022-7-2 12:48
都是这样想的?

谁不想钱钱{:4_170:}

加林森 发表于 2022-7-2 13:33

马黑黑 发表于 2022-7-2 13:11
谁不想钱钱

哈哈。老黑我又发出来了一个,你帮着我看看。

马黑黑 发表于 2022-7-2 14:09

加林森 发表于 2022-7-2 13:33
哈哈。老黑我又发出来了一个,你帮着我看看。

看见了,漂酿哈

加林森 发表于 2022-7-2 14:18

马黑黑 发表于 2022-7-2 14:09
看见了,漂酿哈

谢谢了。我又准备发一首草原歌曲出来。

红影 发表于 2022-7-2 15:05

这个好玩,队长赶快用黑黑的代码设个奖池啊{:4_173:}

红影 发表于 2022-7-2 15:07

能剔除数组,还能用IS判断数组长度变化,这个应该会很有用。{:4_187:}

樵歌 发表于 2022-7-2 16:26

加分分。

马黑黑 发表于 2022-7-2 17:59

樵歌 发表于 2022-7-2 16:26
加分分。

谢谢
页: [1] 2
查看完整版本: JS:删除并改变数组元素