for...in 语句 - 任意顺序是什么意思

for...in statement - what does arbitrary order mean

我有一个非常基本的 ECMAScript 问题,我不确定是否阅读文档 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in 或问题。

我想遍历一个对象,例如构造一个数组。另见我的问题:

如果我使用 d3.js 读取 csv 文件,我将获得一个对象数组。我想从中构建一个数组数组,所以我使用了一个 for (key in obj) 语句。我是否必须对每个对象进行 属性 检查以确保正确的顺序(任意顺序的一种解释),或者我是否可以假设属性将以相同的顺序拾取(第二种解释:只是顺序是任意的 -但稳定)。似乎很多例子都假设了后一种解释。 有人可以澄清一下吗?

您不应期望 for..in 语句以任何特定顺序遍历您的对象属性,即使是在具有相同属性的对象的迭代中也是如此。您可以采取不同的方法来确保正确的顺序,这是我经常使用的方法:

// this is the order I want the values in
var order       = ['id', 'first', 'last'];
var collection  = [{ first: 'Jane', last: 'Doe', id: 1}, {last: 'Smith', id: 2, first: 'John'}];
var outputArray = [];

collection.forEach(function(row){
  var tmpRow = [];
  for(var attr in row){
    // get the target index of the current attribute
    var index = order.indexOf(attr);
    // insert into desired position
    tmpRow[index] = row[attr];
  }
  outputArray.push(tmpRow);
})

console.log(outputArray)

希望对您有所帮助。