Как превратить массив объектов в (больший) массив строк? - PullRequest
0 голосов
/ 05 января 2020

У меня есть этот массив объектов, которые я хочу превратить в массив строк. Есть ли простой способ сделать это?

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

К

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

Ответы [ 2 ]

0 голосов
/ 06 января 2020

Похоже, что массив всех значений является целью.

Это структура массива объектов:

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));
0 голосов
/ 06 января 2020

Вы можете создать новый список, назначив функцию для каждого элемента списка.

Пример: 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, который отображает функцию на каждый элемент списка и flatten результат функции в новом списке.

Простой пример прояснит все это:

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...