【问题标题】:How to turn an array of objects into a (larger) array of strings?如何将对象数组转换为(更大的)字符串数组?
【发布时间】:2020-04-23 09:15:43
【问题描述】:

我有这个对象数组,我想将其转换为字符串数组。有没有简单的方法来做到这一点?

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

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

【问题讨论】:

标签: javascript arrays string object


【解决方案1】:

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

这是对象数组的结构:

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() 中的回调函数应该能够从对象数组中的每个对象中提取值。

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

【讨论】:

    【解决方案2】:

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

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

    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>

    【讨论】:

      猜你喜欢
      • 2022-10-07
      • 2011-12-27
      • 2023-03-28
      • 2021-05-09
      • 1970-01-01
      相关资源
      最近更新 更多