从具有相同键的另一个对象数组创建一个对象数组

Create an array of objects from another array of Objects with same keys

我想创建一个新的数组数组,其中包含循环遍历数组的对象。

const data = [{pizza: {quantities: 5, price: 12}, burger: {quantities: 3, price: 10}, fries: {quantities: 3, price: 6}}, {pizza: {quantities: 3, price: 20}, burger:{quantities: 4, price: 18}, fries: {quantities: 6, price: 8}}]

将上面的数组转换为

[[{quantities: 5, price: 12},{quantities: 3, price: 20}],[{quantities: 3, price: 10},quantities: 4, price: 18}], [{quantities: 3, price: 6},{quantities: 6, price: 8}]]

这是将相同的关键对象组合在一起。 我是编码新手,非常感谢任何帮助。谢谢!

这可能有帮助,如果有其他可行的方法,我也会在几分钟内添加,但这是可行的:

var obj = [{pizza: {quantities: 5, price: 12}, burger: {quantities: 3, price: 10}, fries: {quantities: 3, price: 6}},  {pizza: {quantities: 3, price: 20}, burger:{quantities: 4, price: 18}, fries: {quantities: 6, price: 8}}]
var pizza=[];
var burger=[];
var fries=[];
var ans=[]
for(var i=0;i<obj.length;i++){
  const oPizza = obj[i].pizza;
  const oBurger = obj[i].burger;
  const oFries = obj[i].fries;
  pizza.push(oPizza)
  burger.push(oBurger)
    fries.push(oFries)

}
ans.push(pizza);
ans.push(burger);
ans.push(fries);


console.log(ans)

如果数据采用相同的格式,那么将在此添加其他更好的方法,然后根据 index 简单地分发它,我们将不需要编写我们自己的每个变量:

var obj = [{pizza: {quantities: 5, price: 12}, burger: {quantities: 3, price: 10}, fries: {quantities: 3, price: 6}},  {pizza: {quantities: 3, price: 20}, burger:{quantities: 4, price: 18}, fries: {quantities: 6, price: 8}}]

var ans=[]
obj.map((v)=>{
  var o = v;
  Object.keys(o).map((k,i)=>{
    
    if(ans[i]===undefined)
      ans[i]=[]
      
    ans[i].push(o[k])
  })
})
  console.log(ans)

我假设您想将每种对象(比萨饼、汉堡等)放入其自己的数组中。您需要为此创建一个缓冲区对象,然后使用 forEach 遍历数据数组,在缓冲区中为每个键创建一个对象,并将每个对象推入包含在该键中的数组:

buffer = {};

data.forEach(d=>{
  for(o in d) {
    buffer[o] = buffer[o] || [];
    buffer[o].push(d[o]);
  }
});

几件事。在 forEach 中,括号内的 d 是数组循环时的每个元素。我只是随意选择了d。您可以随意调用此变量。我正在使用箭头函数,因此 => 将传递的对象 (d) 连接到函数操作(包含在 {} 中,就像任何函数一样)。

在循环内,我使用 for..in 迭代由 forEach 传递的对象,因为它不是数组,这可能是最简单的方法。 o 在这种情况下将是对象的键,但您可以使用任何名称。这一行:

buffer[o] = buffer[o] || [];

exists 检查并查看键 o 是否已存在于缓冲区对象中,如果不存在则为其分配一个空数组。 || 是 OR 运算符。 [] 只是一个空数组。如果 buffer[o] 存在,则 || 运算符不必进一步查找,只需 return 现有值即可。如果它不存在,则 || return 是运算符右侧的值,在本例中为空数组 [].

这一行:

buffer[o].push(d[o]);

只是将当前对象(d[o])的值推送到缓冲区对象。

此时,您已将原始数组中的所有对象按键排序到缓冲区对象中。如果您真的只想 return 值数组,那么您可以使用

Object.values(buffer)

到 return 只是那些,应该给出您指定的格式。这种技术不关心键名是什么,因此您不必事先知道,也不必为每个可能的值设置不同的数组。

希望这对您有所帮助,并且解释清楚。如果这对您有用,请告诉我。

const data = [{pizza: {quantities: 5, price: 12}, burger: {quantities: 3, price: 10}, fries: {quantities: 3, price: 6}},  {pizza: {quantities: 3, price: 20}, burger:{quantities: 4, price: 18}, fries: {quantities: 6, price: 8}}];

buffer = {};

data.forEach(d=>{
  for(o in d) {
    buffer[o] = buffer[o] || [];
    buffer[o].push(d[o]);
  }
});

console.log("THE BUFFER:");
console.log(buffer);

console.log("THE ANSWER:");
console.log(Object.values(buffer));