繁体   English   中英

如何将对象数组转换为(更大的)字符串数组?

[英]How to turn an array of objects into a (larger) array of strings?

我有这个对象数组,我想把它变成一个字符串数组。 有没有简单的方法来做到这一点?

var obj = [
  {firstName: "Daniel", lastName: "James"},
  {firstName: "Laura", lastName: "Murray"}
];

var obj = ["Daniel", "James", "Laura", "Murray"]

您可以通过在列表的每个项目上映射函数来创建新列表。

示例: y是通过在x每个项目上映射n => n + 1来创建的:

const x = [10, 20, 30];
const y = x.map(n => n + 1);

x;
//=> [10, 20, 30]

y;
//=> [11, 21, 31]

您还可以将事物列表转换为其他事物列表: x是数字列表, y是字符串列表。

const x = [1, 2, 3];
const y = x.map(n => '🌯'.repeat(n));

y;
//=> ["🌯", "🌯🌯", "🌯🌯🌯"]

在您的情况下,您需要将n 个对象的列表转换为n × 2 个字符串的列表。 (每个对象“产生”两个字符串;名字和姓氏)

为此,我们需要使用Array#flatMap其在列表中的每一项映射的功能作用的结果压扁到新名单。

一个简单的例子将使这一切变得清楚:

const x = ['🌯', '🥑'];
const y = x.flatMap(n => [n, n]);

y;
//=> ["🌯", "🌯", "🥑", "🥑"]

现在让我们来解决您的问题!

 const y = x.flatMap(({firstName, lastName}) => [firstName, lastName]); console.log(y);
 <script> const x = [ { firstName: "Daniel" , lastName: "James" } , { firstName: "Laura" , lastName: "Murray" } ]; </script>

似乎所有值的数组是目标。

这是一个对象数组的结构:

let data = [ //(begin array)
  { //(begin first object)
    firstName: /*(key or property)*/ "Jon", /*(VALUE) what you want*/
    lastName: /*(key or property)*/ "Doe" /*(VALUE) what you want*/
  }, //(end first object)
  //... (more objects, etc)
]; //(end array)
  1. 应用.flatMap()方法,它结合了.map().flat()
    • 它在每个对象上运行一个函数,如果它是一个数组,则将返回展平
  2. .flatMap()的回调函数应该能够从对象数组中的每个对象中提取值。

    • 对于这个阶段,使用Object.values()返回给定对象的值数组。
  3. 每个方法返回的结果如下:

    1. Object.values()每次返回将来自: {key1: "value1", key2: "value2"}["value1", "value2"]
    2. 如果使用.map()则最终返回将是: [["value1", "value2"], ...]一个数组数组。
    3. 如果.flat()应用于#2的结果,则返回将是: ["value1", "value2", ...]
    4. .flatMap()执行#2#3

下面的演示具有一个自定义函数: getvalues() 传入一个对象数组,它返回一个包含每个对象所有值的数组。 与其他答案中使用的其他代码相比,使用此函数的优势在于不必知道实际的键(又名属性),并且每个对象内的键/值对的数量无关紧要。 所以输入:

let data = [
  {firstName: "Jon", lastName: "Doe", age: 30}, 
  {first: "Jane", last: "Doe"}, 
  {color: "green"}
]; 

也是有效的。


演示

 let data = [ {first: "Daniel", last: "James"}, {first: "Laura", last: "Murray"} ]; const getValues = arrayOfObjects => arrayOfObjects.flatMap(object => Object.values(object)); console.log(getValues(data));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM