在arr.splice()之后更新变量

Update variables after arr.splice()

本文关键字:之后 更新 变量 arr splice      更新时间:2024-05-14

我有一个数组,用来填充div,并根据它们在数组中的位置为它们的ID分配数字。

我可以使用.splice()删除一个节,但在删除元素后,元素上的ID保持不变(这会影响我如何删除同一数组中的后续项),直到刷新页面。

例如,它最初是

<div id="favorites-1"></div>
<div id="favorites-2"></div>
<div id="favorites-3"></div>

当我移除其中一个div,比如<div id="favorites-1"></div>时,我希望<div id="favorites-2"></div>现在成为新的<div id="favorites-1"></div>,而收藏夹3变成收藏夹2。

如果我从右到左删除元素,它就起作用了。如果我从左到右移除元素,那么实际上只有第一个元素被移除。

如何使用JavaScript或jQuery根据身份证号码的位置更新身份证号码?

//splice the array
arr.splice(x,y,replacements)
//iterate from the first modified item in the list and set the correct ID 
for(var i=x; i<arr.length; i++) {
    arr[i].id = "favorites-"+i;
}

是手动方式。

但如果你想做很多这样的事情,我建议你使用Knockout.js或类似的库。使用knockout,您将有一个可观察的项数组,可以向其中添加项,并且可以自动将id映射到元素的索引。例如,它可能看起来像这样。

<!-- ko foreach: myItems -->
<div data-bind="attr:{id:'favorites-'+$index"></div>
<!-- /ko -->

您也可以使用其他库(如AngularJS或EmberJS)来实现这一点,但knockout是一个专注于将数据模型绑定到DOM的特定问题的库。

您可以使用delete实现稀疏阵列(这样您就不需要更改元素的ID):

var a = [0,1,2,3];
delete a[1]; // Key "1" was deleted

洞穴

即使没有1密钥,数组的长度仍将为4。如果根据长度循环数组,则会得到a[1]undefined。如果使用for..in进行迭代,则会从关键字"0"跳到"2",但这可能会导致其他问题。。。