【问题标题】:Javascript or Query - Convert Associative Array into ObjectJavascript 或查询 - 将关联数组转换为对象
【发布时间】:2020-02-20 16:23:07
【问题描述】:

这是一个简单的问题,无论如何都不是 JS 专家,并且四处搜索但无法在 Stackoverflow 上找到任何现有示例。

基本上我有一个关联数组,我需要将它转换成一个对象:

例子:

var combinedproducts = [["Testing-1","test-1"],["Testing-2","test2"],["Testing-3","test3"]]

需要变成这样:

var products = {
        // 'productid1':'Product Description One',
        'Testing-1':'test-1',
        'Testing-2':'test-2',
        'Testing-3':'test-3'
    }; 

最好/最简单的方法是什么?我可以使用常规的 javascript 或 jquery。

感谢您的帮助!

【问题讨论】:

    标签: javascript jquery arrays object


    【解决方案1】:

    如果您没有特别的支持问题,您可以简单地使用Object.fromEntries,假设“test2”和“test3”实际上是数组拼写错误,而不是分别转换为test-2test-3,如下所示您的示例输出。

    否则,您需要对它们应用转换(在这种情况下,reduce、简单的forforeach 甚至map 都可以实现)。

    请注意,如上所述,Object.entries 与其他解决方案的支持不同。例如,请记住,它通常不适用于 IE 和 Edge,check this link for further compatibility informations

    var combinedproducts = [["Testing-1","test-1"],["Testing-2","test2"],["Testing-3","test3"]];
    
    const products = Object.fromEntries(combinedproducts);
    console.log(products);

    【讨论】:

    • 我总是忘记存在:)
    • 很好的解决方案,可惜 IE 或 Edge 不支持它:(
    • @Pointy 我通常也是这样,不知道这次我为什么想到这个。
    • @RoryMcCrossan 是的,因此我的前言 :(.
    • 感谢您的帮助!测试文本是一个错字,不需要转换。注意与IE的兼容性问题!选择它作为答案,因为它是我正在寻找的最简单的解决方案。最简单的阅读 = 一行代码。
    【解决方案2】:

    您可以在源数组上使用.reduce()

    let object = combinedProducts.reduce((o, a) => (
      o[a[0]] = a[1],
      o
    ), {});
    

    就其价值而言,源数组在任何形式上都不是真正的“关联数组”。 JavaScript 没有关联数组类型。

    【讨论】:

      【解决方案3】:

      您可以使用数组减少。在回调函数内部添加内部数组的第一个元素作为键,第二个元素作为值

      let data = [
        ["Testing-1", "test-1"],
        ["Testing-2", "test2"],
        ["Testing-3", "test3"]
      ];
      
      let newData = data.reduce((acc, curr) => {
        acc[curr[0]] = curr[1]
        return acc;
      }, {});
      console.log(newData)

      【讨论】:

        【解决方案4】:

        你也可以用这个方法

        const c = [["Testing-1","test-1"],["Testing-2","test2"],["Testing-3","test3"]];
        
        obj =  c.reduce((acc, [ key, val ]) => Object.assign(acc, { [key]: val }), {});
                       
        console.log(obj)

        【讨论】:

          【解决方案5】:

          另一种替代方式是与Object.assignmap. 并排使用

          var combinedproducts = [
            ["Testing-1", "test-1"],
            ["Testing-2", "test2"],
            ["Testing-3", "test3"]
          ];
          
          const obj = Object.assign(
            {},
            ...combinedproducts.map(([key, value]) => ({ [key]: value }))
          );
          
          console.log(obj);

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-06-25
            • 2016-01-11
            • 1970-01-01
            • 2019-04-06
            • 2011-05-19
            相关资源
            最近更新 更多