如何更好地将对象转换为数组?

How better convert an object to array?

我有这个结构:

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

我需要将其更改为:

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

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

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

这应该可以解决问题:

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) 循环格式迭代对象(如数组)中的键。

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

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

您可以像这样遍历数组:

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);

假设您不知道键名或它们的数量,但键的数量和数组的长度是相同的,您可以嵌套 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)

尝试下面的更灵活。

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)

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

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

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