【问题标题】:Angular 2+ compare differences between 2 arraysAngular 2+比较2个数组之间的差异
【发布时间】:2020-02-15 10:56:42
【问题描述】:

我拥有的数组

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 },
    ];

【问题讨论】:

    标签: arrays angular filter


    【解决方案1】:

    使用Array.mapArray.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)

    【讨论】:

      【解决方案2】:

      你可以遍历用户列表,你可以在 onlineuserList 中使用findpush 找到在线用户。

      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);
      

      【讨论】:

        【解决方案3】:

        使用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 })
        );
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-27
          • 2017-10-07
          • 1970-01-01
          • 2015-08-21
          • 1970-01-01
          • 1970-01-01
          • 2017-09-30
          相关资源
          最近更新 更多