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

时间:2016-06-29 14:45:04

标签: javascript arrays object associative-array

如何创建保证订单

的关联数组

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

阵列根本不保证订单。

如何创建一个保证顺序的正确数组呢?

2 个答案:

答案 0 :(得分:2)

在ECMAScript 6中,Map类型是键值对的有序列表,其中键和值都可以具有任何类型。 Map对象以插入顺序迭代其元素。

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

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循环,并为每次迭代返回一个[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)

答案 1 :(得分:0)

您无法在对象中按特定顺序保存属性,但可以在以任何自定义顺序打印时解析它。您必须创建另一个值数组,或者是否要在文档上打印,然后是HTML字符串。

您可以尝试这样的事情:

注意:您可以使用比较运算符><进行检查。您可以解析数值并比较或字符串比较非数字值,但如果您有类似eleven的内容,则会出现问题。

&#13;
&#13;
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;
}
&#13;
<div id="content"></div>
&#13;
&#13;
&#13;