JavaScript - 如何创建保证顺序的关联数组?

JavaScript - How to create an associative array that guarantees order?

如何创建一个保证顺序的关联数组?

Object (not guarantee order):

var obj = {
  "first":"first",
  "2":"2",
  "34":"34",
  "1":"1",
  "second":"second"
};
for (var i in obj) {
    console.log(i);
};

结果:

1
2
34
first
second

数组:

var a = new Array();
a['first'] = "first";
a['2'] = "2";
a['34'] = "34";
a['1'] = "1";
a['second'] = "second";
console.log(a); // [1: "1", 2: "2", 34: "34", first: "first", second: "second"]

for (var i in a) {
    console.log(i);
};

结果:

1
2
34
first
second

数组不保证顺序。

我怎样才能创建一个正确的数组来保证顺序呢?

您不能在对象中以特定顺序保存属性,但您可以在以任何自定义顺序打印时解析它。您将必须创建另一个值数组,或者如果要打印在文档上,则需要一个 HTML 字符串。

您可以尝试这样的操作:

注意:您可以使用比较运算符 >< 进行检查。您可以解析数值并比较或字符串比较非数值,但如果您有类似 eleven.

的内容,则会出现问题

var obj = {
  "first":"first",
  "2":"2",
  "34":"34",
  "1":"1",
  "second":"second"
};

var sortOrder = ["1", "2", "34", "first", "second"];

var html = Object.keys(obj).sort(function(a,b){
  var _a = getSortPosition(a);
  var _b = getSortPosition(b);
  return _a> _b ? 1: _a<_b ? -1 : 0;
}).map(function(item){
  return "<span>" +item+ "</span>";
}).join("<br/>");

document.getElementById("content").innerHTML = html;

function getSortPosition(key){
  var _index = sortOrder.indexOf(key);
  return _index >-1 ? _index : 999;
}
<div id="content"></div>

在 ECMAScript 6 中,映射类型是键值对的有序列表,其中键和值都可以是任何类型。 Map 对象以 插入顺序 .

迭代其元素

forEach 方法按插入顺序对 Map 对象中的每个 key/value 对执行一次提供的函数。

var a = new Map;
a.set("first", "first");
a.set("2", "2");
a.set("34", "34");
a.set("1", "1");
a.set("second", "second");

a.forEach(function(value, key) {
  console.log(key + ' => ' + value)
})

您还可以使用 for...of 循环,它 returns 一个 [key, value] 的数组用于每次迭代。

var a = new Map;
a.set("first", "first");
a.set("2", "2");
a.set("34", "34");
a.set("1", "1");
a.set("second", "second");

for (var p of a) console.log(p)