如何创建保证订单?
的关联数组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
阵列根本不保证订单。
如何创建一个保证顺序的正确数组呢?
答案 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
的内容,则会出现问题。
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;