javascript中的数组不按照按键插入顺序打印

时间:2016-11-03 19:58:33

标签: javascript arrays

以下是代码段。

预期:警报的输出必须为:

210 then 202 then 201

目前工作:

201 then 202 and 210.

问题是,我想按插入顺序而不是按排序顺序。

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>

var newItem = new Array();

newItem['210'] = new Array(1,'test1');
newItem['202'] = new Array(2,'test1');
newItem['201'] = new Array(3,'test1');

for(var item in newItem) {
   alert(item);
}

</script>

</body>
</html>

4 个答案:

答案 0 :(得分:5)

如果您想使用广告订单和字符串作为键,请使用地图。

来自documentation

  

Map对象以插入顺序迭代其元素 - a for ... of   loop为每次迭代返回一个[key,value]数组。

let newItem = new Map();

newItem.set('210', [1,'test1']);
newItem.set('202', [2,'test1']);
newItem.set('201', [3,'test1']);

for ( let item of newItem ) console.log(item);

答案 1 :(得分:2)

一些事情 - 数组每个索引槽有一个值,如下所示:

[1,2,3,4]

您在上面创建的是一个键/值对,在JavaScript中是一个对象 - 对象键具有无排序顺序 - 所以让它们进入它们被插入的顺序是不会发生的。你想要的是一个对象数组

var arr = [];
var obj = { '201' : [1, 'test1'] }
//create the rest of your objects
arr.push(obj);

另外请注意,当您迭代数组时,使用常规for语法 - 当您迭代对象时,请使用for..in

for (var i = 0; i < arr.length; i++) {
    var objKeys = Object.keys(arr[i]); //get the keys of the object being iterated over
    console.log(objKeys[0]); //log the first key (since your objects only have 1 key
}

答案 2 :(得分:0)

使用可以设置密钥,即"210""202""201"作为每个密钥的已创建数组的第一个元素;使用Array.of()将创建的数组设置为元素;迭代在Array.of()循环时使用for..of创建的数组。 (可选)将Array.prototype.entries()链接到已创建的数组,以确认包含key的已创建数组的索引作为数组中的第一个元素。

let items = Array.of(["210", 1, "test1"]
                    , ["202", 2, "test1"]
                    , ["201", 3, "test1"]);

for (let [key, value] of items.entries()) {
  // do stuff
  console.log(key, value)
};

答案 3 :(得分:-1)

根据您问题的预期输出,下面是一个非常简单的代码示例,说明您要实现的目标。

var newItem = [];

newItem.push('210');
newItem.push('202');
newItem.push('201');

newItem.forEach( value => console.log(value) )