0

I have the following object that contains two arrays inside:

const response = {
  "layers": [{
      "layer": "test5",
      "perms": {
        "group_id": 1,
        "layer_id": 60
      }
    },
    {
      "layer": "test6",
      "perms": {
        "group_id": 1,
        "layer_id": 61
      }
    },
    {
      "layer": "test7",
      "perms": {
        "group_id": 1,
        "layer_id": 71
      }
    },
    {
      "layer": "test8",
      "perms": {
        "group_id": 1,
        "layer_id": 76
      }
    }
  ],
  "perms": [{
      "layer": "test6",
      "perms": {
        "group_id": 2,
        "layer_id": 61
      }
    },
    {
      "layer": "test7",
      "perms": {
        "group_id": 2,
        "layer_id": 71
      }
    },
    {
      "layer": "test8",
      "perms": {
        "group_id": 2,
        "layer_id": 76
      }
    }
  ],
  "status": "open"
}

I want to compare both layers and perms and if their layer key is the same then add a new key called check = true otherwise check = false

Here is how I did:

const layers = response.layers
const perms = response.perms
layers.map(layer => {
  perms.filter(perm => {
    if (layer.layer === perm.layer) {
      layer.check = true
    } else {
      layer.check = false
    }
  })
})
return layers

I want to get the following:

"layers": [{
      "layer": "test5",
      "perms": {
        "group_id": 1,
        "layer_id": 60
      },
      "check": false
    },
    {
      "layer": "test6",
      "perms": {
        "group_id": 1,
        "layer_id": 61
      },
      "check": true
    },
    {
      "layer": "test7",
      "perms": {
        "group_id": 1,
        "layer_id": 71
      },
      "check": true
    },
    {
      "layer": "test8",
      "perms": {
        "group_id": 1,
        "layer_id": 76
      },
      "check": true
    }
  ]

0

2 Answers 2

2

Try this

const response = {
  "layers": [{
      "layer": "test5",
      "perms": {
        "group_id": 1,
        "layer_id": 60
      }
    },
    {
      "layer": "test6",
      "perms": {
        "group_id": 1,
        "layer_id": 61
      }
    },
    {
      "layer": "test7",
      "perms": {
        "group_id": 1,
        "layer_id": 71
      }
    },
    {
      "layer": "test8",
      "perms": {
        "group_id": 1,
        "layer_id": 76
      }
    }
  ],
  "perms": [{
      "layer": "test6",
      "perms": {
        "group_id": 2,
        "layer_id": 61
      }
    },
    {
      "layer": "test7",
      "perms": {
        "group_id": 2,
        "layer_id": 71
      }
    },
    {
      "layer": "test8",
      "perms": {
        "group_id": 2,
        "layer_id": 76
      }
    }
  ],
  "status": "open"
};

var newObj=response.layers.map(l=> {
var check=response.perms.some(p=> p.layer == l.layer);
return {...l,check}
})

console.log(newObj)

Sign up to request clarification or add additional context in comments.

Comments

1

Something like this

function intersectLayers(response) {
  const layers = response.layers;
  const perms = response.perms;
  layers.map(layer => {
    layer.check = perms.some(perm => perm.layer === layer.layer);
    return layer;
  });
  return layers;
}

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.