繁体   English   中英

从JavaScript中的多维数组或对象中删除元素

[英]Removing element from multidimensional array or object in javascript

我有一个Rooms对象,该对象内部有很多rooms数组,并且在每个room中都有users元素。

var rooms = {"room1":["user1","user2"],"room2":["user1","user2","user3"]};

如何编写一个在调用时从Rooms数组中删除特定用户的函数?

function leaveRoom(user,room){
  if(typeof room != "undefined"){
//remove user from the specific room ONLY if room argument is passed
  } else {
//remove user from all rooms    
  }
}

我试图将splice与元素的索引一起使用,但是它不起作用。

Array.prototype.remove = function(value) {
    if (this.indexOf(value)!==-1) {
       this.splice(this.indexOf(value), 1);
       return true;
   } else {
      return false;
   };
} 
var roomName="room1",
    userName="user1";
rooms[roomName].remove(userName);

实际上,我什至不确定它是对象还是数组。 请帮忙谢谢

您可以使用for..in循环, deleteArray.prototype.filter()从数组中删除值undefined元素

 var rooms = { "room1": ["user1", "user2"], "room2": ["user1", "user2", "user3"] }; function leaveRoom(user, room, obj) { if (room && Array.isArray(obj[room])) { delete obj[room][obj[room].indexOf(user)]; } else { for (var prop in obj) { delete obj[prop][obj[prop].indexOf(user)]; } }; for (var prop in obj) { obj[prop] = obj[prop].filter(Boolean) } } leaveRoom("user1", "room1", rooms); console.log(rooms); // remove `"user1"` from `"room1"` // pass `null` as second parameter to remove `user` from all rooms leaveRoom("user2", null, rooms); // remove `"user2"` from all rooms console.log(rooms); 

我已经使用for..in循环和slice 希望这个能对您有所帮助

    var rooms = {
  "room1": ["user1", "user2"],
  "room2": ["user1", "user2", "user3"],
  "room3": ["user1", "user2", "user3"]
};

function leaveRoom(user, room) {
  for (var eachroom in rooms) {
    if (eachroom == room) {
      var users = (rooms[eachroom]);
      for (var user_index in users) {
        if (users[user_index] == user) {
          users.splice(user_index, 1);
          break;
        }
      }
      rooms[eachroom] = users;
      break;
    }
  }
  //checking whether the user is removed
  for (var i in rooms) {
    var j = (rooms[i]);
    alert(i+":"+j);
  }

}

leaveRoom('user2', 'room3');

链接到jsfiddle: https ://jsfiddle.net/kannanore/s6u6m5fn/3/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM