代码之家  ›  专栏  ›  技术社区  ›  David R

解析JSON并形成自定义数组

  •  1
  • David R  · 技术社区  · 5 年前

    {
        "rowId": "1",
        "product_name": [
            "Product 1",
            "Product 2",
            "Product 3",
            "Product 4",
            "Product 5"
        ],
        "product_tag": [
            "1112231",
            "1112232",
            "1112233",
            "1112234",
            "1112235"
        ],
        "version_id": [
            "1.0",
            "2.0",
            "1.5",
            "3.0",
            "2.5"
        ]
    }
    

    我多么希望它得到改变。

    {
        [
            "Product 1", 
            "1112231",
            "1.0"
        ],
        [
            "Product 2", 
            "1112232",
            "2.0"
        ],
        [
            "Product 3", 
            "1112233",
            "1.5"
        ],
        [
            "Product 4", 
            "1112234",
            "3.0"
        ],
        [
            "Product 5", 
            "1112235",
            "2.5"
        ]
    }
    

    我试过的 ,

    我试过用 flatMap javascript的函数(如下所示),但运气不佳。(注:此处) 引用上面粘贴的JSON数据)

    [testData.product_name, testData.product_tag, testData.version_id].flatMap((i, index) => i[index]);
    

    它只返回一个这样的记录(在我的情况下,我需要得到5个记录),

    ["Product 1","1112232","1.5"]
    

    有人能帮忙吗?

    4 回复  |  直到 5 年前
        1
  •  2
  •   adiga    5 年前

    你可以用 Array.from 这样地:

    const input={"rowId":"1","product_name":["Product 1","Product 2","Product 3","Product 4","Product 5"],"product_tag":["1112231","1112232","1112233","1112234","1112235"],"version_id":["1.0","2.0","1.5","3.0","2.5"]}
    
    const { product_name, product_tag, version_id } = input;
    
    const output = 
      Array.from(input.product_name, (name, i) => ([ name, product_tag[i], version_id[i] ]))
    
    console.log(output)

    如果每个数组中的项数目不相等,则可以获得最大数组长度来创建输出

    // or Math.min if you don't want undefined items
    const length = Math.max(product_name.length, product_tag.length, version_id.length)
    
    const output = 
      Array.from({ length }, (_, i) => ([ product_name[i] , product_tag[i], version_id[i] ]))
    
        2
  •  2
  •   Nina Scholz    5 年前

    您可以减少值/数组,并将项分配给具有相同索引的数组。

    var object = { rowId: "1", product_name: ["Product 1", "Product 2", "Product 3", "Product 4", "Product 5"], product_tag: ["1112231", "1112232", "1112233", "1112234", "1112235"], version_id: ["1.0", "2.0", "1.5", "3.0", "2.5"] },
        result = Object.values(object).reduce((r, a) => {
            Array.isArray(a) && a.forEach((v, i) => (r[i] = r[i] || []).push(v));
            return r;
        }, []);
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }
        3
  •  2
  •   Eddie    5 年前

    product_name , product_tag version_id 按你喜欢的顺序。这是为了确保订单是正确的。使用 reduce 循环遍历数组。使用 forEach

    let data = {"rowId":"1","product_name":["Product 1","Product 2","Product 3","Product 4","Product 5"],"product_tag":["1112231","1112232","1112233","1112234","1112235"],"version_id":["1.0","2.0","1.5","3.0","2.5"]}
    
    let result = [data.product_name, data.product_tag, data.version_id].reduce((c, v) => {
      v.forEach((e, i) => {
        c[i] = c[i] || [];
        c[i].push(e);
      });
      return c;
    }, []);
    
    console.log(result);
        4
  •  1
  •   mahesh gurjar    5 年前
    let arr = obj.product_name.map((it,index)=>[it,obj.product_tag[index],obj.version_id[index]])
    
        5
  •  0
  •   Chady M'barki    5 年前

    如果你想的话你可以这样做

     const ar= {
        "rowId": "1",
        "product_name": [
            "Product 1",
            "Product 2",
            "Product 3",
            "Product 4",
            "Product 5"
        ],
        "product_tag": [
            "1112231",
            "1112232",
            "1112233",
            "1112234",
            "1112235"
        ],
        "version_id": [
            "1.0",
            "2.0",
            "1.5",
            "3.0",
            "2.5"
        ]
    };
    let newAr = {};
    
    for(var i = 0;i < ar.product_name.length;i++){
        newAr[i]= [ar.product_name[i],ar.product_tag[i],ar.version_id[i]];
    
    }