Angular 2+ сравнить различия между 2 массивами - PullRequest
2 голосов
/ 18 октября 2019

Массивы, которые у меня есть

const users = [
      { id: 1, name: "field 1" },
      { id: 2, name: "field 2" },
      { id: 3, name: "field 3" },
      { id: 4, name: "field 4" },
    ];
    const onlineUsers = [
      { id: 1, name: "field 1" },
      { id: 3, name: "field 3" }
    ];

Я бы хотел найти онлайн и офлайн, сравнив две серии

Я хочу сделать:

const userLists = [
      { id: 1, name: "field 1", online: true },
      { id: 2, name: "field 2", online: false },
      { id: 3, name: "field 3", online: true },
      { id: 4, name: "field 4", online: false },
    ];

Ответы [ 3 ]

0 голосов
/ 18 октября 2019

Вы можете просто просмотреть список пользователей, и вы можете найти онлайн-пользователя, используя find и просто push его в onlineuserList.

const users = [
      { id: 1, name: "field 1" },
      { id: 2, name: "field 2" },
      { id: 3, name: "field 3" },
      { id: 4, name: "field 4" },
    ];
    const onlineUsers = [
      { id: 1, name: "field 1" },
      { id: 3, name: "field 3" }
    ];

const userLists  = [];

users.forEach(user => {
  if(onlineUsers.find(q => q.id == user.id)){
    userLists.push({
      id: user.id,
      name: user.name,
      online: "true"
    })
  }
  else{
    userLists.push({
      id: user.id,
      name: user.name,
      online: "false"
    })
  }
})

console.log(userLists);
0 голосов
/ 18 октября 2019

немного более быстрый подход с использованием Array.indexOf() и JSON.strigify()

const onlineUsers = JSON.stringify([
  { id: 1, name: "field 1" },
  { id: 3, name: "field 3" }
]);  

const userList = users.map(user => 
  ({ 
     ...user,
     online: onlineUsers.indexOf(JSON.stringify(user)) > -1
   })
);

ИЛИ , если вы не хотите менять оригиналonlineUsers массив или объявление другой переменной:

const userList = users.map(user => 
  ({ ...user, online: JSON.stringify(onlineUsers).indexOf(JSON.stringify(user)) > -1 })
);
0 голосов
/ 18 октября 2019

Использование Array.map и Array.some

const users = [
      { id: 1, name: "field 1" },
      { id: 2, name: "field 2" },
      { id: 3, name: "field 3" },
      { id: 4, name: "field 4" },
    ];
    const onlineUsers = [
      { id: 1, name: "field 1" },
      { id: 3, name: "field 3" }
    ];
    
    var retVal=users.map(u=>{
    var isOnline=onlineUsers.some(ou=> ou.id==u.id);//this will check if onlineUsers have some record with given userid
    return {...u,online:isOnline}
    })
    
    console.log(retVal)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...