使用Javascript中的变量名创建全局数组(非关联数组)

使用Javascript中的变量名创建全局数组(非关联数组),javascript,jquery,arrays,variables,global-variables,Javascript,Jquery,Arrays,Variables,Global Variables,我已经阅读了一些与我所问问题相关的问题和答案,但我不认为它们完全回答了我的问题 我想创建一个新的全局数组,如果它不存在变量名 我现在的代码是 function NewRoom(RoomID, UserID, Usrname) { //Check if RoomID array is already declared or not and create new one if not //and add UserID and Usrname in it and then return

我已经阅读了一些与我所问问题相关的问题和答案,但我不认为它们完全回答了我的问题

我想创建一个新的全局数组,如果它不存在变量名

我现在的代码是

function NewRoom(RoomID, UserID, Usrname)
{
    //Check if RoomID array is already declared or not and create new one if not
    //and add UserID and Usrname in it and then return it

    //My Current Code from a SO answer
    RoomID = ( typeof RoomID != 'undefined' && RoomID instanceof Array ) ? RoomID : [];
    RoomID[UserID] = Usrname;
    return RoomID;
}

var users = ['abc','def','ghi'];
for(var i=0; i<3; i++)
{
    NewRoom('Room2', i, users[i]);
}

var users2 = ['jkl','mno','pqr'];
for(var i=0; i<3; i++)
{
    NewRoom('Room3', i, users2[i]);
}

console.log(users);
console.log(users2);

My Console always show last inserted results like for above users and users2 it is

Object { 2="ghi"};
Object { 2="pqr"};
函数NewRoom(RoomID、UserID、Usrname)
{
//检查是否已声明RoomID数组,如果未声明,则创建新的RoomID数组
//并在其中添加UserID和Usrname,然后返回它
//我的当前代码来自SO答案
RoomID=(RoomID的类型!=“未定义”&&RoomID数组实例)?RoomID:[];
RoomID[UserID]=Usrname;
返回室友;
}
变量用户=['abc'、'def'、'ghi'];

对于(var i=0;i您不想创建全局变量。您可以将房间添加为对象的索引,并从对象读取以获取房间中的所有用户

如果要使用房间创建“全局”阵列,请使用以下命令:

(function () {
    var rooms = {};

    function setRoom(RoomID, UserID, Usrname) {
        if (typeof rooms[RoomID] === 'undefined') {
            rooms[RoomID] = {};
        }
        rooms[RoomID][UserID] = Usrname;
    }

    var users = ['abc','def','ghi'];
    for(var i=0; i<3; i++) {
        setRoom('Room2', i, users[i]);
    }

    var users2 = ['jkl','mno','pqr'];
    for(var i=0; i<3; i++) {
        setRoom('Room3', i, users2[i]);
    }

    console.log(rooms['Room2']);
    console.log(rooms['Room3']);
    console.log(rooms);
}) ();
function NewRoom(RoomID, UserID, Usrname)
{
   if($.isArray(RoomID ))
   {
       RoomID[UserID] = Usrname;
       return RoomID;
   }
   else
   {
       RoomID=[];
       RoomID[UserID] = Usrname;
       return RoomID;
   }
(函数(){
var房间={};
功能设置室(RoomID、UserID、Usrname){
if(房间类型[RoomID]=“未定义”){
房间[房间ID]={};
}
rooms[RoomID][UserID]=Usrname;
}
变量用户=['abc'、'def'、'ghi'];

对于(var i=0;i这样的东西怎么样:

function NewArray (RoomId, UserId, UsrName){
  RoomId = RoomId || [];
  RoomId [UserId] = UsrName;
  return RoomId;
 }

您的数组检查可能错误。请改用以下方法:

RoomID = Object.prototype.toString.call(RoomID) === '[object Array]' ? RoomID : [];

您可以执行以下操作:

(function () {
    var rooms = {};

    function setRoom(RoomID, UserID, Usrname) {
        if (typeof rooms[RoomID] === 'undefined') {
            rooms[RoomID] = {};
        }
        rooms[RoomID][UserID] = Usrname;
    }

    var users = ['abc','def','ghi'];
    for(var i=0; i<3; i++) {
        setRoom('Room2', i, users[i]);
    }

    var users2 = ['jkl','mno','pqr'];
    for(var i=0; i<3; i++) {
        setRoom('Room3', i, users2[i]);
    }

    console.log(rooms['Room2']);
    console.log(rooms['Room3']);
    console.log(rooms);
}) ();
function NewRoom(RoomID, UserID, Usrname)
{
   if($.isArray(RoomID ))
   {
       RoomID[UserID] = Usrname;
       return RoomID;
   }
   else
   {
       RoomID=[];
       RoomID[UserID] = Usrname;
       return RoomID;
   }

你能提供你做的测试吗?我已经把我的代码放在你需要的上面了。上面的结果是,如果在循环中调用这个函数NewRoom,它总是会创建新的数组。@JohnSmith每次你描述“不工作”的问题时,如果没有进一步的解释,就会缺少一些东西。或者你收到一个错误(并且你应该超过你获得的所有输出),或者你有一个意外的输出(并且你应该发布你得到的输出和你期望的结果)在调用函数的循环之后,它总是在RoomID数组中给出最后一个存储的结果。让我更新我的代码。如果像你说的那样将其声明为var RoomID,那么它将是一个永久的RoomID,而不是通过添加数据来更新它。我想用我提供的任何RoomID创建一个新数组。好的,你想添加新的房间吗。查看我的编辑。@Hiddle-look我已经更新了我的问题,以便更好地理解anks-Hidde。我现在可以使用它了。Hidde如果我不想创建关联数组,你能提供技巧吗?实际上我不想使用关联数组,正如我说的,我问你为什么不想创建关联数组?没有用:(它再次使用我提供的RoomID创建新数组。因此,请看@JohnSmith comment。您试图实现什么?我的示例是,如果您传递数组,则不会创建新数组。