JavaScript - “规范化”数组索引

JavaScript - 'Normalize' array indexes

本文关键字:规范化 数组 索引 JavaScript      更新时间:2023-09-26

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

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

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

我的意思是:

function normalize( arrayWithMessedUpIndexes ){ return reIndexedAndOrderedArray }

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

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

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

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

你可以使用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
    • 一个。让Pk ToString(k).
    • 二.让我们kPresent调用带有参数Pk的 [[HasProperty]] O的内部方法的结果。
    • 三.如果kPresent为真,则
      • 施展魔术

由于示例数组的第一个初始化索引是 42,对于每个n < 42,调用n in arrarr.hasOwnProperty (n)的计算结果为false

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

请注意,[].filter是 ES5,可能与旧版浏览器不兼容。

数组

索引总是排序的,你需要做的就是删除不需要的元素

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