Reputation: 331
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
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
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
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
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
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
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
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
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