JavaScript:比删除更好的解决方案

3

I have the following array:

var example = [
    function() { /* hello */ },
    function() { /* goodbye */ }
];

我使用delete example[0];后,得到以下结果:
var example = [
    1: function() { /* goodbye */ }
];

有没有比delete更好的解决方案?或者有没有简单的方法来修复数组中的索引?(我可以使用jQuery)。 编辑:我已经修复了示例数组。这些索引是作为示例存在的。
4个回答

7

由于example是一个数组,所以您可以使用.splice[MDN]来替代delete

example.splice(0, 1);

但是,如果examples实际上是一个对象,那么你就必须使用delete并且遍历所有属性并将它们“重命名”。虽然使用数组可能更容易。
使用delete的原因是你正在从底层对象中删除属性'0',而属性'1'仍然存在。你基本上在操作较低级别的内容。
索引中存在间隙的另一个问题是,array.length将始终返回最高索引+1,而不是数组中实际值的数量。因此,在删除元素后,example.length仍将是2

1
[].shift()同样适用。如果您想从数组末尾删除它,也可以使用[].pop() - Alex Wayne

1

你定义数组的方式是错误的。 这是正确的方法:

var example = [
    function() { /* hello */ },
    function() { /* goodbye */ }
];

您可以使用 shift 来删除第一个元素:
var firstElement = example.shift();

0
你可以使用自定义排序函数:
array.sort(sortfunction)

function sortfunction(a, b){
  // check indexes here
}

0

你可以只移动你的第一个元素。

http://jsfiddle.net/4zW7B/1/

var example = [
    function() { alert('hello'); },
    function() { alert('goodbye'); }
];
example[0]();
example.shift();
example[0]();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接