代码之家  ›  专栏  ›  技术社区  ›  London804

映射未按正确顺序返回对象?

  •  0
  • London804  · 技术社区  · 7 年前

    我有一个函数,它循环遍历一个数组,并为我的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));
    2 回复  |  直到 7 年前
        1
  •  0
  •   Abid Hasan    7 年前

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

        2
  •  1
  •   Paul    7 年前

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

    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);
    }
    推荐文章