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

从数组创建对象[关闭]

  •  -2
  • Igal  · 技术社区  · 7 年前

    我正在尝试将数组转换为映射, 阵列如下所示:

    var array = [{
      "id" : 123
    }, {
      "id" : 456
    }, {
      "id" : 789
    }];
    

    我试图构建的最后一个对象应该如下所示:

    var result = {
      "123": { id: 123 } , 
      "456": { id: 456 } , 
      "789": { id: 789 }
    };
    

    任何有效的实施方法都将受到赞赏:)

    谢谢

    2 回复  |  直到 7 年前
        1
  •  4
  •   Muhammad Usman vramu    5 年前

    var array = [
        {
            "id": 123,
            "otherProp": "true"
        },
        {
            "id": 456,
            "otherProp": "false"
        },
        {
            "id": 789,
            "otherProp": "true"
        }
    ];
    var result = array.reduce(function (acc, cur, i) {
        acc[cur.id] = cur;
        return acc;
    }, {});
    
    console.log(result);

    使用javaScript reduce

    这个 reduce() 方法对累加器和数组中的每个元素(从左到右)应用函数,以将其减少为单个值。

        2
  •  2
  •   Peter Seliger    7 年前

    使用 reduce

    var array = [{
      "id" : 123
    }, {
      "id" : 456
    }, {
      "id" : 789
    }];
    
    var expectedValue = {
      "123": { id: 123 } , 
      "456": { id: 456 } , 
      "789": { id: 789 }
    };
    
    var result = array.reduce( (acc, c) => (acc[ c.id ] = c, acc) ,{});
    
    console.log('result : ', result);
    console.log('(JSON.stringify(expectedValue) === JSON.stringify(result)) ? ', (JSON.stringify(expectedValue) === JSON.stringify(result)));
    .as-console-wrapper { max-height: 100%!important; top: 0; }

    解释

    • 使用 减少 迭代和 初始化收集器 {}
    • 将键设置为 id 每次迭代项目的 c 和值为 c 它本身