我正在寻找一种方法来规范化' Javascript中的数组索引。
我有一个大数组(_spm
)包含带有数字索引的值,如(_spm[201023]
)。
(为了你,要理解:从零开始重新索引数组。)
我需要一种方法来使所有记录都具有更人性化的索引(也可以进行排序)。
我的意思是:
function normalize( arrayWithMessedUpIndexes ){ return reIndexedAndOrderedArray }
可能的输入是数组_spm
,考虑到:
_spm[201023] = "s";
_spm[376615] = "m";
我正在寻找的方法的可能输出(使用上面的输入数组):
_spm[0] = "s"
_spm[1] = "m"
答案 0 :(得分:2)
var arr = [];
arr [42] = "foo";
arr [1337] = "bar";
arr.filter (function () {return true}); //["foo", "bar"]
现在,这是如何工作的?我们来看看ES5 §15.4.4.20,它描述了这个过程。
Pk
为ToString(k)
。kPresent
成为使用参数O
调用[{1}}的[[HasProperty]]内部方法的结果。Pk
为真,则为
由于我们的示例数组的第一个初始化索引是42,
对于每个kPresent
,调用n < 42
或n in arr
的评估结果为arr.hasOwnProperty (n)
。
鉴于此,不满足步骤 9c 中描述的条件,因此跳过索引。
请注意,false
是ES5,可能与旧浏览器不兼容。
答案 1 :(得分:1)
数组索引总是排序,所以您需要做的就是删除不需要的元素
_spm = _spm.filter(function(v) { return v != undefined });