[英]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)
.flatMap()
方法,它结合了.map()
和.flat()
.flatMap()
的回调函数应该能够从对象数组中的每个对象中提取值。
Object.values()
返回给定对象的值数组。每个方法返回的结果如下:
Object.values()
每次返回将来自: {key1: "value1", key2: "value2"}
到["value1", "value2"]
.map()
则最终返回将是: [["value1", "value2"], ...]
一个数组数组。.flat()
应用于#2的结果,则返回将是: ["value1", "value2", ...]
.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.