【问题标题】:merge arrays and convert to JSON string合并数组并转换为 JSON 字符串
【发布时间】:2018-04-27 20:28:16
【问题描述】:

我有两个由字符串组成的数组 ["25","36","32"]["GradeA", "GradeB", "GradeC"]

我想将它们合并在一起,并希望生成类似这样的 JSON 字符串:

{"GradeA" : "25", "GradeB" : "36", "GradeC": "32"}

如何在 js 中做到这一点?

【问题讨论】:

标签: javascript arrays json merge add


【解决方案1】:

另外 2 美分我给你它的 forEach 循环版本。这是考虑到每个数组将是 1 对 1 并以适当的顺序排列。

var grade = ["GradeA", "GradeB", "GradeC"];
var number = ["25","36","32"];
var obj = {};

grade.forEach(function(x, i){
    obj[x] = number[i];
});

console.log(JSON.stringify(obj));

【讨论】:

    【解决方案2】:

    以下代码将给出您预期的输出:

     var arr1 = [25,36,32] ;
     var arr2 =  ["GradeA", "GradeB", "GradeC"];
     var gradeObj = {};
     for(var i = 0;i<arr2.length;i++){
       gradeObj[arr2[i]] = arr1[i];
     }
     
     console.log(JSON.stringify(gradeObj));

    【讨论】:

      【解决方案3】:

      这样试试

      var keys =["GradeA", "GradeB", "GradeC"];
      var values= ["25","36","32"];
      var obj = {};
      for(var i=0; i< keys.length; i++){
          if(values.length>i+1){
               obj[keys[i]] = values[i];
           }else{
               obj[keys[i]] = null;
           }
      } 
      console.log(obj);
      

      【讨论】:

        【解决方案4】:

        使用 ES6 reduce:

        {
          const a = ["25","36","32"];
          const b = ["GradeA", "GradeB", "GradeC"];
          const merge = (keys, values) => keys.reduce(
            (obj, key, i) => (obj[key] = values[i], obj),
            {}
          );
        
          const json = JSON.stringify(
            merge(b, a)
          );
          console.log(json);
        }

        与原生Reflect API:

        {
          const a = ["25","36","32"];
          const b = ["GradeA", "GradeB", "GradeC"];
          const merge = (keys, values) => keys.reduce(
            (obj, key, i) => Reflect.set(obj, key, values[i]) && obj,
            {}
          );
        
          const json = JSON.stringify(
            merge(b, a)
          );
          console.log(json);
        }

        【讨论】:

          【解决方案5】:

          使用Array#reduceObject#assign 在每次迭代中向对象添加属性及其值:

          const keys = ["GradeA", "GradeB", "GradeC"];
          const values = ["25","36","32"];
          
          const result = keys.reduce((obj, key, i) => Object.assign(obj, { [key]: values[i] }), {});
          
          console.log(result);

          使用Array#map,创建一系列对象,每个对象都有一个属性,然后用Object#assign将它们组合成一个对象,然后传播:

          const keys = ["GradeA", "GradeB", "GradeC"];
          const values = ["25","36","32"];
          
          const result = Object.assign(...keys.map((key, i) => ({ [key]: values[i] })));
          
          console.log(result);

          【讨论】:

            【解决方案6】:

            试试 ES6 Destructuring Assignment

            var obj = {};
            
            var arr1 = ["25","36","32"];
            var arr2 = ["GradeA", "GradeB", "GradeC"];
            
            function f([...val1], [...val2]) {
                for (var i in val1) {
                    obj[val1[i]] = val2[i];
                }
            }
            
            f(arr2, arr1);
            
            console.log(obj);

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-12-13
              • 1970-01-01
              • 1970-01-01
              • 2014-05-09
              相关资源
              最近更新 更多