Javascript ES6 - 节点Js - 关联数组 - 对象使用 - 错误的默认顺序

时间:2018-01-02 21:42:39

标签: node.js ecmascript-6 javascript-objects associative-array

我在尝试在节点中使用关联数组/对象时遇到问题,我有以下代码,我想获得插入元素时使用的相同顺序。

var aa = []

aa[0] = 1
aa['second'] = 'pep'
aa['third'] = 'rob'
aa[4] = 2

for (var pos in aa)     console.log (aa[pos])

但是内部节点首先放置/排序数字。

看实际执行:

1
2
pep
rob

我已经创建了一个并行的动态结构来解决这个问题,但是我想要另一个解决方案或想法来实现这个目标。

问候。

里卡多。

3 个答案:

答案 0 :(得分:2)

首先,对于动态键,我建议使用字典而不是数组:

var aa = {};

元素列为默认顺序。您可以通过以下方式检查其默认顺序:

var keys = Object.keys(aa);
for (var i = 0; i < keys.length; i++) {
    console.log(keys[i]);
}

如果在插入元素时需要默认顺序作为相同的顺序,请尝试将此插入顺序保存在另一个数组中:

var aa = {};
var keys = [];

aa[0] = 1
keys.push(0);

aa['second'] = 'pep'
keys.push('second');

aa['third'] = 'rob'
keys.push('third');

aa[4] = 2
keys.push(4);

for (var i = 0; i < keys.length; i++) {
    console.log(aa[keys[i]]);
}

答案 1 :(得分:2)

您可能还想尝试一些ES6功能。鉴于您希望将数据存储在类似哈希的数据结构中,以保留我建议尝试Map的顺序:

var map = new Map();

map.set(0, 1);
map.set('second', 'pep');
map.set('third', 'rob');
map.set(4, 2);

for (var [key, value] of map) {
    console.log(key, value);
}

map.forEach(function (value, key) {
    console.log(key, value);
});

答案 2 :(得分:0)

nodejs数组只是数字作为键的对象,而一些函数则添加到原型中。还有。数组通常是两个数组,其值通过公共索引铰接在一起。例如: let a = [1,2,3]; let b = ["one","two","three"]; 也试图摆脱使用for循环查看数组。通过原型使用过多的功能。 for循环还遍历对象原型上的可枚举属性,因此for循环也会错误地迭代它。