javascript - 将键值对放入对象中 - 为什么它按 # 对条目进行排序?

标签 javascript arrays object

下面是我的代码。我将一个数字放入一个对象中,它是键值对的两倍。我很好奇为什么它按 # 对结果进行排序。至于为什么 '13': 26 条目出现在 '21': 42 之前,而 13 在数组中出现在 21 之后?感谢您的任何见解。

var array = [1,2,3,4,5,8,7,21,13];
var object = {};

for (var i = 0; i < array.length; i++){
object[array[i]] = double(array[i]);
}

function double(a){
return a*2;
}

console.log(object);

这是我在控制台中得到的:

{ '1': 2,
'2': 4,
'3': 6,
'4': 8,
'5': 10,
'7': 14,
'8': 16,
'13': 26,
'21': 42 }

最佳答案

JavaScript 对象通常是无序的,您不应该依赖属性的顺序。 您可以尝试此代码段以按顺序获取结果:

var array = [1,2,3,4,5,8,7,21,13];
var object = {};

for (var i = 0; i < array.length; i++){
object[array[i]] = double(array[i]);
}

function double(a){
return a*2;
}

console.log(JSON.stringify(object));


编辑

上面的代码片段不能保证顺序,因为:

An object is a member of the type Object. It is an unordered collection of properties each of which contains a primitive value, object, or function.

因此您在代码中获得的顺序将取决于您的浏览器如何解释它(因为没有定义确切的规则,它可能按键按升序排序)。

保留此顺序的一种方法是使用数组(已排序)。这是一个使用对象数组的示例:

var array = [1,2,3,4,5,8,7,21,13];
var object = []; // changed this to an array

for (var i = 0; i < array.length; i++) {
  var newObject = {};
  
  // in order to insert keys as variables
  newObject[array[i]] = double(array[i]);
  object.push(newObject);
}

function double(a){
return a*2;
}

console.log(object);

注意:我先创建了一个对象,然后才将其推送到数组。如果您希望从某个变量设置键值,这是必需的。

关于javascript - 将键值对放入对象中 - 为什么它按 # 对条目进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40056426/

相关文章:

javascript - 在javascript中连接分割字符串

javascript - Nodejs/Javascript 当每个数字超过 15 位时获取起始数字和结束数字之间的数字

javascript - 从嵌套的对象数组中提取所有特定属性

javascript - Array.includes() 在数组中查找对象

javascript - 如何使用函数将数组添加到参数?

java - Java中删除对象

javascript - iOS5 不支持 bind()!

javascript - 如何在jquery中显示不带双引号的json数组数据

javascript - 使用 sqlite3 的 jekyll 静态站点生成器

php - 从 php 数组中获取不同的总和