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)
如何创建一个保证顺序的关联数组?
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)