JavaScript объединяет массив объектов на основе массива объектов одного элемента в ES6 - PullRequest
0 голосов
/ 25 июня 2018

У меня есть следующие данные

var data = [
  {username:'andy', entries:[{time_in:12, ..},{time_in:334,...}]},
  {username:'andy2', entries:[{time_in:'sr12', ..},{time_in:334,...}]}
]

Я с нетерпением жду получения окончательных данных с

var result = [
  {username:'andy', entry:12},
  {username:'andy', entry:334},
  {username:'andy2', entry:'sr12'},
  {username:'andy2', entry:334},
]

Для каждого объекта массива имеется больше свойств, но для краткости я включилтолько имя пользователя

Итак, я попробовал

data.forEach(item=>{
  item.entries.forEach(entry=>{
    //am stuck here
  })
})

Ответы [ 5 ]

0 голосов
/ 25 июня 2018

Возможное решение:

const result = data.map(({username, entries}) =>
    entries.map(({time_in})=> ({username: username, entry: time_in}))
).reduce((acc, val) => [...acc, ...val], [])
0 голосов
/ 25 июня 2018

Вот неизменяемая версия:

const data=[
  {
    username:'andy', entries:[{time_in:12},{time_in:334}]
  }, {
    username:'andy2', entries:[{time_in:'sr12'},{time_in:334}]
  }
];
    

const x = data.reduce((acc, {username, entries}) =>
  acc.concat(
  	entries.map(({time_in}) => ({
        username,
        time_in
    }))
  )
, []);
  
console.log(x);
0 голосов
/ 25 июня 2018

Вы можете сделать что-то вроде этого:

const final = [];
data.forEach(item =>
  item.entries.forEach(entry =>
    final.push({ username: item.username, entry: entry.time_in })
  )
);
0 голосов
/ 25 июня 2018

Я думаю, карта поможет:

var result = data.map((item) => {
    return {
        username: item.username,
        entries: item.entries.length, // Or whatever processing you want
        ...
    }
}
0 голосов
/ 25 июня 2018

Вы можете использовать array#reduce с array#forEach.Выполните итерацию по каждому объекту, и для каждого объекта выполните итерацию по массиву entries, добавьте новый объект в аккумулятор.

const data = [
  {username: 'andy', entries: [{time_in: 12}, {time_in: 334}]},
  {username: 'andy2', entries: [{time_in: 'sr12'}, {time_in: 334}]}
]

const result = data.reduce((r, {username, entries}) => {
  entries.forEach(({time_in: entry}) => r.push({username, entry}))
  return r
}, [])

console.log(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...