【问题标题】:How better convert an object to array?如何更好地将对象转换为数组?
【发布时间】:2020-06-30 01:46:05
【问题描述】:

我有这个结构:

obj: {
  firstKey: ["one", "two"],
  secondKey: ["three", "four"],
}

我需要把它改成这样:

[
  {
    firstKey:"one"
    secondKey:"three"
  },

  {
    firstKey:"two"
    secondKey:"four"
  }
]

我尝试使用一些 Object 的方法,但没有结果。 我需要一个建议。 谢谢!

【问题讨论】:

    标签: javascript arrays object data-structures ecmascript-5


    【解决方案1】:

    这应该可以解决问题:

    const obj = {
      firstKey: ["one", "two"],
      secondKey: ["three", "four"],
    };
    const newArr = [];
    
    for(let key in obj) {
      // safety check to make sure we don't iterate over prototype properties
      if(!obj.hasOwnProperty(key)) continue;
    
      newArr.push({
        firstKey: obj[key][0],
        secondKey: obj[key][1]
      });
    }
    
    console.log(newArr);

    您可以使用for(let key in obj) 循环格式来迭代对象(如数组)中的键。

    【讨论】:

      【解决方案2】:

      你可以为此做一个 for 循环。

      let a = []
      for (let i = 0; i < m.firstKey.length; i++) {
              a.push({firstKey: m.firstKey[i], secondKey: m.secondKey[i]})}
      

      【讨论】:

        【解决方案3】:

        你可以像这样遍历数组:

        var obj1 = {
          firstKey: ["one", "two"],
          secondKey: ["three", "four"],
        }
        
        var arr1 = obj1.firstKey;
        var arr2 = obj1.secondKey;
        
        var obj = [];
        for(var i = 0; i < arr1.length; i++) {
            var a = {"firstKey": arr1[i], "secondKey": arr2[i]};
            obj.push(a);
        }
        console.log(obj);

        【讨论】:

          【解决方案4】:

          假设你不知道键名或它们的数量,但键的数量和数组的长度是相同的,你可以做一个嵌套的reduce()

          let obj= {firstKey: ["one", "two"],secondKey: ["three", "four"]}
          
          let keys = Object.keys(obj)
          
          let res = Object.values(obj).reduce((a,c)=>{
             return a.concat( c.reduce((o,v,i)=> (o[keys[i]] = v,o),{}));
          },[])
          
          console.log(res)

          【讨论】:

            【解决方案5】:

            试试下面的更灵活。

            var j = {
              obj: {
                firstKey: ["one", "two", "wow"],
                secondKey: ["three", "four"],
                thirdKey: ["five", "six"],
                fourthKey: [null, "seven", "eight", "nine", "ten"]
              }
            }
            var n = [];
            
            var kys = Object.keys(j.obj);
            var f = Object.values(j.obj[kys[0]]).length;
            
            for (var k in kys) {
              if (j.obj[kys[k]].length > f) f = j.obj[kys[k]].length;
            }
            
            for (var i = 0; i < f; i++) {
              var o = {}
              for (var k in kys) {
                o[kys[k]] = j.obj[kys[k]][i] || null
              }
              n.push(o);
            }
            
            console.log(n)

            【讨论】:

              【解决方案6】:

              您可以在第一个键上使用map(),并通过使用索引从对象访问第二个键将其转换为对象:

              let obj = {
                firstKey: ["one", "two"],
                secondKey: ["three", "four"],
              };
              
              let arr = obj.firstKey.map((firstKey, i) => ({firstKey, secondKey: obj.secondKey[i]}));
              console.log(arr);

              【讨论】:

                猜你喜欢
                • 2019-02-26
                • 1970-01-01
                • 2018-02-13
                • 2017-07-30
                • 1970-01-01
                • 2022-01-23
                • 2011-01-29
                相关资源
                最近更新 更多