Как превратить список объектов в массив объектов в JavaScript? - PullRequest
0 голосов
/ 25 ноября 2018

Я учусь манипулировать массивами и объектами в Javascript.

Это список объектов:

Ввод:

{ user_id: 1,
  name: 'Alice',
  created_at: 2018-11-23T20:47:39.618Z,
  count: '3' }
{ user_id: 4,
  name: 'Daphne',
  created_at: 2018-11-19T21:47:39.618Z,
  count: '3' }
{ user_id: 2,
  name: 'Bob',
  created_at: 2018-11-23T18:47:39.618Z,
  count: '2' }
{ user_id: 5,
  name: 'Evan',
  created_at: 2018-11-18T19:47:39.618Z,
  count: '2' }
{ user_id: 6,
  name: 'Fabia',
  created_at: 2018-11-22T23:47:39.618Z,
  count: '2' }

Желаемый вывод:

[ { user_id: 1,
    name: 'Alice',
    created_at: 2018-11-23T20:47:39.618Z,
    count: '3' },
  { user_id: 4,
    name: 'Daphne',
    created_at: 2018-11-19T21:47:39.618Z,
    count: '3' },
  { user_id: 2,
    name: 'Bob',
    created_at: 2018-11-23T18:47:39.618Z,
    count: '2' },
  { user_id: 5,
    name: 'Evan',
    created_at: 2018-11-18T19:47:39.618Z,
    count: '2' },
  { user_id: 6,
    name: 'Fabia',
    created_at: 2018-11-22T23:47:39.618Z,
    count: '2' } ]

Я новичок в программировании на JavaScript.пытался решить эту проблему, но пока нет решения?Кто-нибудь, пожалуйста, помогите?

Ответы [ 3 ]

0 голосов
/ 25 ноября 2018

Также

Object.values(obj);

, где obj = ваши данные

0 голосов
/ 25 ноября 2018

Вы должны получить его как JSON из postgres с row_to_json(), json_agg и / или array_to_json().См. Эту документацию о Агрегатных функциях

select array_to_json(array_agg(row_to_json(t)))
from (
  select id, text from words
) t

Или ваш список должен быть строкой, поскольку он недопустим. JS.

`${yourQueryData}`

Если ввод должен быть таким, как упомянуто в вопросе, поэтому строка (скажем, из txt-ввода или что-то еще) вот что мы можем сделать.

Мы добавим скобки вокруг этой строки, чтобы получитьначалось.

Затем мы идентифицируем каждый аспект, который не будет действительным, когда мы анализируем его для данных JSON.

  1. Добавить запятые между объектами: }{ в },{
  2. Получить ключи и добавить кавычки вокруг них: user_id: в "user_id":
  3. Заменитьодинарные кавычки двойными кавычками: 'Alice' становится "Alice"
  4. Ваши метки времени должны быть преобразованы в строки: 2018-11-23T20:47:39.618Z в "2018-11-23T20:47:39.618Z"

Как только все это будет исправлено, мыиспользуйте JSON.parse() и там у вас есть массив объектов JSON.

Есть много способов добраться туда.Вы можете разбить вашу строку в нескольких местах, затем выполнить итерацию и выполнить необходимые задачи.

Здесь я буду использовать регулярное выражение.Для ясности, каждый шаг достаточно четкий, даже в регулярных выражениях содержится гораздо больше групп, чем необходимо, но я надеюсь, что это облегчает понимание как есть.

Этот ответ основан именно на коде, который вы предоставили,Но это потребует некоторых модификаций, если, например, name содержит одну кавычку.

const list = `
{ user_id: 1,
  name: 'Alice',
  created_at: 2018-11-23T20:47:39.618Z,
  count: '3' }
{ user_id: 4,
  name: 'Daphne',
  created_at: 2018-11-19T21:47:39.618Z,
  count: '3' }
{ user_id: 2,
  name: 'Bob',
  created_at: 2018-11-23T18:47:39.618Z,
  count: '2' }
{ user_id: 5,
  name: 'Evan',
  created_at: 2018-11-18T19:47:39.618Z,
  count: '2' }
{ user_id: 6,
  name: 'Fabia',
  created_at: 2018-11-22T23:47:39.618Z,
  count: '2' }
`

// Add brackets around the list to have the string representation of an array
const array = `[${list}]` // wrap into array

// 1. Add commas between objects: `}{` to `},{`
const regex = /\}[\r\n|\r|\n]?\{/gm // match closing followed by opening bracket 
const fixObjects = array.replace(regex, "},\n{") // add comma at the end of each object

// 2. Get the keys and add quotes around them: `user_id:` to `"user_id":`
const keysReg = /^(?:[\s|\{]+)([\w]+)(?:\:)/gm // get keys
const fixKeys = fixObjects.replace(keysReg, function(match, g1) { return match.replace(g1, `"${g1}"`) }); // wrap keys in quotes

// 3. Replace single quotes by double quotes: `'Alice'` becomes `"Alice"`
const quotesReg = /'(.*)'/gm // match between single quotes
const fixQuotes = fixKeys.replace(quotesReg, function(match, g1) { return `"${g1}"` })

// 4. Your timestamps must be converted to strings: `2018-11-23T20:47:39.618Z` to `"2018-11-23T20:47:39.618Z"`
const datesReg = /(\d{4})\-(\d{2})\-(\d{2})T(\d{2}):(\d{2}):(\d{2}).(\d{3})Z/gm // timestamps as strings
const fixDates = fixQuotes.replace(datesReg, function(match) { return `"${match}"` } )

console.log(JSON.parse(fixDates))
0 голосов
/ 25 ноября 2018

Попробуйте это ..

objectsArray = Array.from( ObjectsList );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...