【问题标题】:Map not returning object in the correct order?地图没有以正确的顺序返回对象?
【发布时间】:2018-08-03 17:12:21
【问题描述】:

我有一个循环遍历数组并将键值对设置到我的 Map 对象的函数。然后我调用另一个函数,将对象中的数字乘以 2。当我返回 Map 对象时,我注意到对象中的数字现在按数字顺序排列。根据API,它应该保留数组的原始顺序,但事实并非如此。我做错了什么?

var manArray = [5, 2, 7, 4];
function manipulation(arr) {

  var myMap = new Map();

  for(let i = 0; i < arr.length; i++) {
    var key = arr[i].toString();
    var value = double(arr[i]);

    myMap[key] = value; 
  }
  
  return myMap;
}

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

console.log(manipulation(manArray));

【问题讨论】:

  • 您为什么希望对象按任何特定顺序排列?
  • 不保证对象键顺序。这是事实。

标签: javascript loops javascript-objects


【解决方案1】:

myMap[key] = value; 不是您在 Map 中设置值的方式。这只是分配常规对象属性,就好像您根本没有使用 Map 一样。使用这个:

myMap.set( key, value );

然后,如果您遍历地图,则可以保证插入顺序。

var manArray = [5, 2, 7, 4];
function manipulation(arr) {

  var myMap = new Map();

  for(let i = 0; i < arr.length; i++) {
    var key = arr[i].toString();
    var value = double(arr[i]);

    myMap.set( key, value );
  }
  
  return myMap;
}

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

for ( const [key, value] of manipulation( manArray ) ) {
  console.log(key + ': ' + value);
}

【讨论】:

    【解决方案2】:

    在 JS 中不保证对象键/属性的顺序。对象本质上是无序的集合或属性(不同的 JS 实现可能有不同的对象属性顺序)。如果您确实想保留对象顺序,您可以查看 Map,它确实保证了顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多