Отображение массива в определенном формате в JavaScript с отображением - PullRequest
2 голосов
/ 22 марта 2019

Необходимо отобразить массив в определенном формате.Массивы ввода:

let userList = [
  {"id": "12356","username": "test@gmail.com"},
  {"id": "333333", "username": "test1@gmail.com"}
]
let userArray = [
  {"username": "test@gmail.com","sharedPaper": "some paper"}
]

Ожидаемый результат:

let resultArr = [
  {"id":"12356","username": "test@gmail.com","sharedPaper": "some paper"}
]

Ответы [ 9 ]

3 голосов
/ 22 марта 2019

Вы можете использовать filter и map методы (при условии, что username уникален)

const userList = [{
  "id": "12356",
  "username": "test@gmail.com"
}, {
  "id": "333333",
   "username": "test1@gmail.com"
 }];
const userArray = [{"username": "test@gmail.com","sharedPaper": "some paper"}];

const result = userList
  .filter(user => userArray.find(u => u.username === user.username))
  .map(user => {
      const userAdditionalData = userArray.find(u => u.username === user.username);
      return {
         ...user,
         ...userAdditionalData
      }
});

console.log(result)
1 голос
/ 22 марта 2019

let userList = [
    { id: '12356', username: 'user1@gmail.com' },
    { id: '333333', username: 'user2@gmail.com' },
]
let userArray = [
    { username: 'user1@gmail.com', sharedPaper: 'some paper 1' },
    { username: 'user2@gmail.com', sharedPaper: 'some paper 2' },
]

let resultArr = userList.map(user => ({
    ...user,
    sharedPaper: userArray.find(
        usa => usa.username === user.username
    ).sharedPaper,
}))

console.log(resultArr)
1 голос
/ 22 марта 2019
let userList=[{"id": "12356","username": "test@gmail.com"},
             {"id": "333333", "username": "test1@gmail.com"}];
let userArray=[{"username": "test@gmail.com","sharedPaper": "some paper"}];


var result = userList.reduce((acc, c)=>{
    let k = userArray.find((a)=>{ return a.username == c.username });
    k ? acc.push({...c, ...k}): ''
    return acc ;
}, []);

console.log(result);

Надеюсь, это поможет вам!

1 голос
/ 22 марта 2019

Я предложу сначала создать Карту или Объект для поиска, используя Array.prototype.find

let userList=[{"id": "12356","username": "test@gmail.com"},
             {"id": "333333", "username": "test1@gmail.com"}]
let userArray=[{"username": "test@gmail.com","sharedPaper": "some paper"}]

let map = userArray.reduce((a, c) => {
	a.has(c.username)? '':  a.set(c.username, c);
	return a;
}, new Map())

let out = userList.map(ele =>  ({...ele, ...map.get(ele.username)})).filter(ele => ele.sharedPaper);

console.log(out)
1 голос
/ 22 марта 2019

Вы можете сделать:

const userList = [{"id": "12356", "username": "test@gmail.com"}, {"id": "333333", "username": "test1@gmail.com"}];
const userArray = [{"username": "test@gmail.com", "sharedPaper": "some paper"}];
const resultArr = userArray.map(u => Object.assign({id: userList.find(ul => ul.username === u.username).id}, u));

console.log(resultArr);
0 голосов
/ 22 марта 2019

let userList = [
  {"id": "12356","username": "test@gmail.com"},
  {"id": "333333", "username": "test1@gmail.com"}
]
let userArray = [
  {"username": "test@gmail.com","sharedPaper": "some paper"}
]

let rs = userArray.map(({username:u, sharedPaper}) => 
  ({...(userList.find(e => u === e.username)), sharedPaper})
)

console.log(rs)
0 голосов
/ 22 марта 2019

let userList = [{
    "id": "12356",
    "username": "test@gmail.com"
  },
  {
    "id": "333333",
    "username": "test1@gmail.com"
  }
]
let userArray = [{
  "username": "test@gmail.com",
  "sharedPaper": "some paper"
}]

let resultArr = userList.map(user => {

  let userSharedPaper = userArray.find(userId => userId.username ===
    user.username);

  if (userSharedPaper && Object.keys(userSharedPaper).length > 0) {

    return { ...user,
      sharedPaper: userSharedPaper.sharedPaper
    }

  } else {
  
  return { ...user, sharedPaper:"" }
  
  }


})

console.log(resultArr)
0 голосов
/ 22 марта 2019

Я думаю, что вы также можете сделать это с помощью «уменьшить», что-то вроде этого:

var resultArr = userList.reduce((arr, e) => {
  arr.push(Object.assign({}, e, userArray.find(a => a.username == e.username)))
  return arr;
}, [])
0 голосов
/ 22 марта 2019

Вам необходимо объединить два списка с общим свойством username

Вы можете сделать это так:

userArray.forEach(w=>{
      let user=userList.find(u=>u.username===w.username); 
      if(user) w['id']=user.id})

userArrayбудет обновлено с дополнительным свойством 'id', как показано ниже

enter image description here

...