JavaScript - 'Normalize'数组索引

时间:2013-11-18 14:24:05

标签: javascript arrays

我正在寻找一种方法来规范化' Javascript中的数组索引。 我有一个大数组(_spm)包含带有数字索引的值,如(_spm[201023])。

(为了你,要理解:从零开始重新索引数组。)

我需要一种方法来使所有记录都具有更人性化的索引(也可以进行排序)。

我的意思是:

function normalize( arrayWithMessedUpIndexes ){ return reIndexedAndOrderedArray }

可能的输入是数组_spm,考虑到:

 _spm[201023] = "s";
 _spm[376615] = "m";

我正在寻找的方法的可能输出(使用上面的输入数组):

 _spm[0] = "s"
 _spm[1] = "m"

2 个答案:

答案 0 :(得分:2)

您可以使用Array.prototype.filter

var arr = [];
arr [42] = "foo";
arr [1337] = "bar";

arr.filter (function () {return true}); //["foo", "bar"]

现在,这是如何工作的?我们来看看ES5 §15.4.4.20,它描述了这个过程。

  • ... 一些初始化步骤
  • 9 。重复,而k < LEN
    • 一个。让PkToString(k)
    • 湾让kPresent成为使用参数O调用[{1}}的[[HasProperty]]内部方法的结果。
    • ℃。如果Pk为真,则为
      • 做魔术

由于我们的示例数组的第一个初始化索引是42, 对于每个kPresent,调用n < 42n in arr的评估结果为arr.hasOwnProperty (n)

鉴于此,不满足步骤 9c 中描述的条件,因此跳过索引。

请注意,false是ES5,可能与旧浏览器不兼容。

答案 1 :(得分:1)

数组索引总是排序,所以您需要做的就是删除不需要的元素

_spm = _spm.filter(function(v) { return v != undefined });