簡體   English   中英

JavaScript-“規范化”數組索引

[英]JavaScript - 'Normalize' array indexes

我正在尋找一種方法來“標准化” 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 <len
    • 一種。 PkToString(k)
    • kPresent為使用參數Pk調用O的[[HasProperty]]內部方法的結果。
    • C。 如果kPresent為true,則
      • 做魔術

由於示例數組的第一個初始化索引為42,因此對於每n < 42n in arrn in arr調用arr.hasOwnProperty (n)計算結果為false

鑒於此,不滿足步驟9c中描述的條件,因此將跳過索引。

請注意, [].filter是ES5,可能與舊版瀏覽器不兼容。

數組索引總是排序的,因此,您要做的就是刪除不需要的元素

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM