Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中的数组对象数组中添加值?_Javascript_Arrays - Fatal编程技术网

如何在Javascript中的数组对象数组中添加值?

如何在Javascript中的数组对象数组中添加值?,javascript,arrays,Javascript,Arrays,对于给定的数组对象 map = [ { "userId":"2345454", "socketIds":["asd2324","asdfs3242"] }, { "userId":"353453", "socketIds":["asdf3456","as234s","sfsdf324"] } ]; 我得到了一个新的套接字Id和一个要添加到映射中的用

对于给定的数组对象

map = [
        {
         "userId":"2345454",
         "socketIds":["asd2324","asdfs3242"]
        },
        {
         "userId":"353453",
         "socketIds":["asdf3456","as234s","sfsdf324"]
        }
      ];

我得到了一个新的套接字Id和一个要添加到映射中的用户Id。如何在数组中搜索用户Id,并将套接字Id(如果存在)推送到元素中,或者如果没有元素与提供的用户Id匹配,如何将具有套接字Id和用户Id的新元素添加到数组中?

您可以找到索引并在其存在时进行更新

var userId=“2345454”;
var id=“56”;
变量映射=[
{
“用户ID”:“2345454”,
“SocketId”:[“asd2324”、“ASDFS3422”]
},
{
“用户ID”:“353453”,
“socketIds”:[“asdf3456”、“as234s”、“sfsdf324”]
}
];
var idx=map.map(函数(val){return val.userId}).indexOf(userId);
如果(idx>-1){
map[idx].socketIds.push(id);
}否则{
push({userId:userId,socketIds:[id]});
}

控制台日志(map)以下是您应该尝试的内容

var映射=[
{
“用户ID”:“2345454”,
“SocketId”:[“asd2324”、“ASDFS3422”]
},
{
“用户ID”:“353453”,
“socketIds”:[“asdf3456”、“as234s”、“sfsdf324”]
}
];
函数inserOrUpdate(newObj){
var obj=map.find(函数(el){
返回el.userId==newObj.userId;
});
如果(obj){
obj.socketIds=newObj.socketIds;
}否则{
地图推送(newObj);
}
}
插入器更新({
“用户ID”:“2345454”,
“socketIds”:[“aaaaaaa”,“bbbbbbb”]
});
log(JSON.stringify(map));

以下代码也有助于避免SocketId中的重复值

var map = [
    {
     "userId":"2345454",
     "socketIds":["asd2324","asdfs3242"]
    },
    {
     "userId":"353453",
     "socketIds":["asdf3456","as234s","sfsdf324"]
    }
  ];

var idx = map.map(function(val){ return val.userId}).indexOf(paramUserId);
  if(idx > -1) {
        var idxx= map[idx].socketIds.indexOf(paramUserId);

        if(idxx==-1){
            map[idx].socketIds.push(paramSocketId);    
        }
  } else {
    map.push({userId: paramUserId, socketIds: [paramSocketId]});
  }
console.log(map);

这将添加一个新用户和套接字(如果该用户不存在),或者仅将一个新套接字值推送到现有用户(如果该用户存在)

var map = [
        {
         "userId":"2345454",
         "socketIds":["asd2324","asdfs3242"]
        },
        {
         "userId":"353453",
         "socketIds":["asdf3456","as234s","sfsdf324"]
        }
      ];

function addOrUpdate(userArray, userId, socketId) {
  const user = userArray.find(usr =>  usr.userId === userId);
  if(user) {
    user.socketIds.push(socketId);
  } else {
    userArray.push({userId: userId, socketIds: [socketId]});
  }

}
addOrUpdate(map, '2345454', '123888');
addOrUpdate(map, '999999', 'sock1');

console.log(map); 

你试过什么?这是很容易在SOPossible replicate上找到的,问题出在哪里?找到正确的数组,将值放入其中?请具体一点。我已经为你重新安排了这个问题。我希望现在一切都清楚了。
var map = [
        {
         "userId":"2345454",
         "socketIds":["asd2324","asdfs3242"]
        },
        {
         "userId":"353453",
         "socketIds":["asdf3456","as234s","sfsdf324"]
        }
      ];

function addOrUpdate(userArray, userId, socketId) {
  const user = userArray.find(usr =>  usr.userId === userId);
  if(user) {
    user.socketIds.push(socketId);
  } else {
    userArray.push({userId: userId, socketIds: [socketId]});
  }

}
addOrUpdate(map, '2345454', '123888');
addOrUpdate(map, '999999', 'sock1');

console.log(map);