如何转换数组?

How do I transform an array?

我有一个形式的数组:

[

    {
        foo:{
            name: 'One',
            value: 10
        },
        bar: {
            name: 'Two',
            value: 20
        }
    }

]

我想要获取以下形式的数组:

[
    {
        name: 'One',
        value: 10
    },
    {
        name: 'Two',
        value: 20
    }
]

例如,我可以用地图对其进行转换吗? 或者我需要其他方法吗?

您可以使用Object.values() along with Array.flatMap()得到所需的结果:

let arr = [
    {
        foo:{
            name: 'One',
            value: 10
        },
        bar: {
            name: 'Two',
            value: 20
        }
    }
]


let result = arr.flatMap(obj => Object.values(obj));
console.log('Result:', result)
.as-console-wrapper { max-height: 100% !important; top: 0; }

flatMap功能并非所有版本都支持,您可以check this

您可以使用支持的数组方法示例尝试此功能:

function transform(arr) {
   let empty = [];
   arr.forEach(obj => {
       const secondArr = Object.entries(obj);
       empty.push(...secondArr.map(arr => arr[1]));
   });
return empty;
}

这里有一个例子 JSFiddle PlayGround

编辑:我看到你更正了原来的 post,这个答案不再相关,因为我猜你想定义的数组不是你真正想要的。出于教育目的,我将保留我原来的答案,但为了回答你的问题,我建议你查看@terry-lennox 的答案


您指定的第一个数组无效:这意味着两个元素都具有此形状:

foo: {
    name: 'One',
    value: 10
}

这不是一个有效的元素。我猜你的意思是每个元素都是一个对象本身,比如:

{
    foo: {
        name: 'One',
        value: 10
    }
}

所以,原数组应该是:

[{
    foo: {
        name: 'One',
        value: 10
    }
}, {
    bar: {
        name: 'Two',
        value: 20
    }
}]

有了这个,您的目标是检索数组的每个元素中第一个键的对象。你可以这样做:

yourArray.map(item => item[Object.keys(item)[0]]);

map() 将 return 通过 运行 其函数参数 yourArray 的每个元素的新数组。 map() 中指定的函数只是 return 每个项目的第一个键上的任何内容。

因为map函数会return结果以嵌套数组的形式出现。我们只对对象中存在的对象的值部分感兴趣。所以我们可以使用 Objects.values() 来得到它。最后,我们可以将嵌套数组展平,得到需要的结果

let data = [

  {
    foo: {
      name: 'One',
      value: 10
    },
    bar: {
      name: 'Two',
      value: 20
    }
  }

];

console.log(
  Object.values(data).map(i => {
    return Object.values(i);
  }).flat()
);