Sakhawat Hossain Sohel
Sakhawat Hossain Sohel

Reputation: 335

I want to return true or false after comparing two arrays

I want to return true or false after comparing two arrays.

First Array Here:

const permissionsArray = [
  {
    "groupName": "User",
    "permissions": [
      "Permissions.Users.View",
      "Permissions.Users.Create",
      "Permissions.Users.Edit",
      "Permissions.Users.Delete"
    ]
  }, {
    "groupName": "Role",
    "permissions": [
      "Permissions.Roles.View",
      "Permissions.Roles.Create",
      "Permissions.Roles.Edit",
      "Permissions.Roles.Delete"
    ]
  },
] 

Object Here which contain permissions Array:

const userPermissionArray = 
  {
    "id": "cdfda4d3-ea1a-4662-a611-2d2e52b772b0",
    "name": "ABP Manager",
    "description": "ABP Manager",
    "usersCount": 4,
    "isActive": false,
    "permissions": [
      "Permissions.Users.View",
      "Permissions.Users.Create",
      "Permissions.Users.Edit",
      "Permissions.Users.Delete"
    ]
  }

I want to compare [permissionsArray.permissions] and [userPermissionArray.permissions].

I tried, but I failed. My code here:

console.log(
  userPermissionArray.permissions
    .map(roleItem => roleItem === userPermissionArray
      .map(item  => item.permissions.map(item => item))
    )
);

I was trying to return 'true' or 'false'.

Upvotes: 1

Views: 1383

Answers (3)

moiz
moiz

Reputation: 11

    let x = ['a', 'b', 'c', 'd']
    let y = ['b', 'c']
    let cont=[]
    let rs = x.reduce((a, b) => {
      return {
          ...a,
          [b]: y.includes(b)
      }
    }, {})
    
    for(let i=0; i < x.length; i++){ 
      if((rs[x[i]])){
        cont.push({
          data: x[i],
          selected : true
        })
      }else
      cont.push({
        data: x[i],
        selected : false
      })
    }
console.log(cont)

Upvotes: 1

Anh Tuan
Anh Tuan

Reputation: 1143

try to compare like this:

    let permissionsA = [
        "Permissions.Users.View",
        "Permissions.Users.Create",
        "Permissions.Users.Edit",
        "Permissions.Users.Delete"
    ]
    
    let permissionsB = [
        "Permissions.Users.View",
        "Permissions.Users.Create",
        "Permissions.Users.Edit",
    ]
    
    let rs = permissionsA.reduce((a, b) => {
        return {
            ...a,
            [b]: permissionsB.includes(b)
        }
    }, {})

    console.log(rs)

    
/*  
 {
  Permissions.Users.Create: true,
  Permissions.Users.Delete: false,
  Permissions.Users.Edit: true,
  Permissions.Users.View: true
 } */

Upvotes: 0

Rajdeep D
Rajdeep D

Reputation: 3920

You can flat the permission list for ease of comparison and then use some function to check any entry exist

let flatPermissions = permissionsArray.map(e => e["permissions"]).flat();

let result = userPermissionArray.permissions.some(i => flatPermissions.includes(i));

console.log(result);

Upvotes: 1

Related Questions