如何在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);