Muhammad Mudassir
Muhammad Mudassir

Reputation: 331

Searching value in array

I have this type of data

var rooms = [
       {roomID:'room1',memberID:['1111','2222']},
       {roomID:'room2',memberID:['1111','3333']},
       {roomID:'room2',memberID:['3333','1111']}]

var test = ['1111','2222']

OR var test = ['2222','1111'] I want to select the room which have memeberID equal to test i.e room1 should be selected for both value of test Please help.

Upvotes: 0

Views: 128

Answers (8)

François Richard
François Richard

Reputation: 7035

var rooms = [{
    roomID: 'room1',
    memberID: ['1111', '2222']
  },
  {
    roomID: 'room2',
    memberID: ['1111', '3333']
  },
  {
    roomID: 'room2',
    memberID: ['3333', '1111']
  }
]

var test = ['1111', '2222']
var selection = '';
rooms.forEach(function(element, index) {

  if (element.memberID == test) {
    selection = element;
  } else {
    return console.log("test has not been found");
  }

});

Upvotes: 1

PeterKA
PeterKA

Reputation: 24638

You can use .filter and .indexOf as follows:

var mRoomIDs = $.map(rooms.filter(function(room) {
    return room.memberID.indexOf( test[0] ) > -1 && room.memberID.indexOf( test[1] ) > -1;
}), function(v,i) {
    return v.roomID;
});

Demo:

var rooms = [{
    roomID: 'room1',
    memberID: ['1111', '2222']
  },
  {
    roomID: 'room2',
    memberID: ['2222', '1111']
  },
  {
    roomID: 'room2',
    memberID: ['1111', '3333']
  },
  {
    roomID: 'room2',
    memberID: ['3333', '1111']
  }
]

var test = ['2222', '1111']; //test = ['1111','2222']

var mRoomID = $.map(rooms.filter(function(room) {
  return room.memberID.indexOf(test[0]) > -1 && room.memberID.indexOf(test[1]) > -1;
}), function(v, i) {
  return v.roomID;
});

console.log(mRoomID)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Output: ["room1", "room2"]

Upvotes: 0

tymeJV
tymeJV

Reputation: 104775

Assuming the arrays will always be in the right order, you can stringify to compare:

var rooms = [{
    roomID: 'room1',
    memberID: ['1111', '2222']
  },
  {
    roomID: 'room2',
    memberID: ['1111', '3333']
  },
  {
    roomID: 'room2',
    memberID: ['3333', '1111']
  }
]

var test = ['1111', '2222']

var matchedRooms = rooms.filter(function(room) {
  return JSON.stringify(room.memberID) === JSON.stringify(test);
});

console.log(matchedRooms);

Upvotes: 1

thecodeparadox
thecodeparadox

Reputation: 87073

var rooms = [{
    roomID: 'room1',
    memberID: ['1111', '2222']
  },
  {
    roomID: 'room2',
    memberID: ['1111', '3333']
  },
  {
    roomID: 'room2',
    memberID: ['3333', '1111']
  }
]

var test = ['1111', '2222']
var result = $.map(rooms, function(i) {
  if (i.memberID[0] === test[0] && i.memberID[1] == test[1]) return i;
}).pop();

console.log(result.roomID); // 'room2'
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Upvotes: 1

PitaJ
PitaJ

Reputation: 15002

Unfortunately, you probably have to search for it manually:

var rooms = [{
    roomID: 'room1',
    memberID: ['1111', '2222']
  },
  {
    roomID: 'room2',
    memberID: ['1111', '3333']
  },
  {
    roomID: 'room2',
    memberID: ['3333', '1111']
  }
]

var test = ['1111', '2222']
var x;
for (x = 0; x < rooms.length; x++) {
  if (rooms[x].memberID[0] === test[0] && rooms[x].memberID[1] === test[1]) {
    // arrays aren't equal, so compare the members
    break;
  }
}

The index of the rooms array that has .memberID equivalent to test will now be stored in x

Upvotes: 0

Muhammad Mudassir
Muhammad Mudassir

Reputation: 331

I finally manage to get the room in both conditions of the test array.

var rooms = [{
  roomID: 'room1',
  memberID: ['1111', '2222']
}, {
  roomID: 'room2',
  memberID: ['1111', '3333']
}, {
  roomID: 'room3',
  memberID: ['3333', '1111']
}]
var test = ['2222', '1111'];

//var test = ['1111','2222'];
var currentRoom;
for (var i = 0; i < rooms.length; i++) {
  // look for the entry with a matching `code` value
  if (((rooms[i].memberID[0] === test[0]) || (rooms[i].memberID[0] === test[1])) && ((rooms[i].memberID[1] === test[1]) || (rooms[i].memberID[1] === test[0]))) {

    currentRoom = rooms[i]
  }
}
console.log(currentRoom)

Upvotes: 0

guest271314
guest271314

Reputation: 1

Try

var test = ["1111","2222"] // , test2 = ["2222", "1111"];
// `test2 === test.reverse()` -> utilized same variable (`test`) for OR check
var res = $.grep(rooms, function(v, k) {
  return (String(v.memberID) === (String(test) || String(test.reverse())))
});

var rooms = [
       {roomID:'room1',memberID:['1111','2222']},
       {roomID:'room2',memberID:['1111','3333']},
       {roomID:'room2',memberID:['3333','1111']}]

, test = ['1111','2222'] //, test2 = ["2222", "1111"]

, res = $.grep(rooms, function(v, k) {
  return (String(v.memberID) === (String(test) || String(test.reverse())))
});
console.log(res);
document.write(JSON.stringify(res))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

Upvotes: 0

blackmind
blackmind

Reputation: 1296

var rooms = [
       {roomID:'room1',memberID:['1111','2222']},
       {roomID:'room2',memberID:['2222','1111']},
       {roomID:'room2',memberID:['1111','3333']},
       {roomID:'room2',memberID:['3333','1111']}]

var test = ['1111','2222']

// iterate over each element in the array
for (var i = 0; i < rooms.length i++){
  // look for the entry with a matching `code` value
  if (rooms[i].memberID[0] === test[0] && rooms[i].memberID[1] === test[1]){
     // we found it
    // rooms[i] is the matched result
    // break if need only first match;
  }
}

Upvotes: 1

Related Questions