Javascript 搜索数组中的对象并更新(如果存在或添加)
这就是我的登录用户阵列的外观:Javascript 搜索数组中的对象并更新(如果存在或添加),javascript,ecmascript-6,Javascript,Ecmascript 6,这就是我的登录用户阵列的外观: const connectedUsers = [{ user: { uuid: 'b62-2dw', points: 1, }, id: "1234567" }]; 当新用户登录到我的系统时,我将查看此表: this.connectedUsers = [ ...this.connectedUsers, { ...payload, id: client.id }, ]; 然后我的数组如下所示:(为了更好地理
const connectedUsers = [{
user: {
uuid: 'b62-2dw',
points: 1,
},
id: "1234567"
}];
当新用户登录到我的系统时,我将查看此表:
this.connectedUsers = [
...this.connectedUsers,
{
...payload,
id: client.id
},
];
然后我的数组如下所示:(为了更好地理解,我给出了这个)
如果uuid类似于663 dda
的用户更新了他的点,我将再次执行此方法。
当我让它保持原样时,类似的事情就会发生:
const connectedUsers = [{
user: {
uuid: 'b62-2dw',
points: 1,
},
id: "1234567"
},
{
user: {
uuid: '663-dda',
points: 5,
},
id: "33332"
},
{
user: {
uuid: '663-dda',
points: 6,
},
id: "33332"
}
];
我想编写一个非常好的(使用ES6+算法,首先检查这个数组中是否存在这样的对象(通过id
或user.uuid
进行检查)。如果是,请更新。如果没有,请添加新对象。所以它应该是这样的:
const connectedUsers = [{
user: {
uuid: 'b62-2dw',
points: 1,
},
id: "1234567"
},
{
user: {
uuid: '663-dda',
points: 6,
},
id: "33332"
}
];
在用户登录时更新阵列的代码中,可以执行以下操作:
const connectedUsers = [{
user: {
uuid: 'b62-2dw',
points: 1,
},
id: "1234567"
},
{
user: {
uuid: '663-dda',
points: 6,
},
id: "33332"
}
];
if(!this.connectedUsers.find(user=>user.user.uuid===payload.user.uuid){
此参数为0.connectedUsers=[
…这是连接用户,
{…有效负载,id:client.id},
];
}
在用户登录时更新阵列的代码中,可以执行以下操作:
const connectedUsers = [{
user: {
uuid: 'b62-2dw',
points: 1,
},
id: "1234567"
},
{
user: {
uuid: '663-dda',
points: 6,
},
id: "33332"
}
];
if(!this.connectedUsers.find(user=>user.user.uuid===payload.user.uuid){
此参数为0.connectedUsers=[
…这是连接用户,
{…有效负载,id:client.id},
];
}
const connectedUsers=[{
用户:{
uuid:'b62-2dw',
要点:一,,
},
id:“1234567”
},
{
用户:{
uuid:'663 dda',
要点:五,,
},
身份证号码:“33332”
},
{
用户:{
uuid:'663 dda',
要点:6,
},
身份证号码:“33332”
}];
//让我们拿一些样本对象
常数newObDuplicateUuid={
用户:{
uuid:'663 dda',
要点:6,
},
id:“3333290”
}
常量newObDuplicateId={
用户:{
uuid:'756 dda',
要点:6,
},
身份证号码:“33332”
}
常数newObFresh={
用户:{
uuid:'756 dda',
要点:6,
},
id:“3333290”
}
让checkRule=connectedUsers.every(item=>item.user.uuid!=newobduplicateuid.user.uuid&&item.id!=newobduplicateuid.id)
//对于相同的uuid返回false
checkRule=connectedUsers.every(item=>item.user.uuid!=newObDuplicateId.user.uuid&&item.id!=newObDuplicateId.id)
//对于相同的id返回false
checkRule=connectedUsers.every(item=>item.user.uuid!=newObFresh.user.uuid&&item.id!=newObFresh.id)
//返回真值
log('通过验证:'+检查规则);
const result=checkRule?[…connectedUsers,NewObjFresh]:“存在重复值”;
console.log(结果);
const connectedUsers=[{
用户:{
uuid:'b62-2dw',
要点:一,,
},
id:“1234567”
},
{
用户:{
uuid:'663 dda',
要点:五,,
},
身份证号码:“33332”
},
{
用户:{
uuid:'663 dda',
要点:6,
},
身份证号码:“33332”
}];
//让我们拿一些样本对象
常数newObDuplicateUuid={
用户:{
uuid:'663 dda',
要点:6,
},
id:“3333290”
}
常量newObDuplicateId={
用户:{
uuid:'756 dda',
要点:6,
},
身份证号码:“33332”
}
常数newObFresh={
用户:{
uuid:'756 dda',
要点:6,
},
id:“3333290”
}
让checkRule=connectedUsers.every(item=>item.user.uuid!=newobduplicateuid.user.uuid&&item.id!=newobduplicateuid.id)
//对于相同的uuid返回false
checkRule=connectedUsers.every(item=>item.user.uuid!=newObDuplicateId.user.uuid&&item.id!=newObDuplicateId.id)
//对于相同的id返回false
checkRule=connectedUsers.every(item=>item.user.uuid!=newObFresh.user.uuid&&item.id!=newObFresh.id)
//返回真值
log('通过验证:'+检查规则);
const result=checkRule?[…connectedUsers,NewObjFresh]:“存在重复值”;
console.log(result);
这是我的方法。一个函数涵盖了这两种情况。只需传递数组和新条目
,它就会返回更新列表
函数更新RADDUSER(ListoUsers,newEntry){
让发现=错误;
const updateUserList=ListoUsers.map(条目=>{
if(entry.user.uuid==newEntry.user.uuid){
发现=真;
返回新条目;
}
返回条目;
});
如果(!找到){
updateUserList.push(新用户);
}
返回updateUserList;
}
这是我的方法。一个函数涵盖了这两种情况。只需传递数组和新条目
,它就会返回更新列表
函数更新RADDUSER(ListoUsers,newEntry){
让发现=错误;
const updateUserList=ListoUsers.map(条目=>{
if(entry.user.uuid==newEntry.user.uuid){
发现=真;
返回新条目;
}
返回条目;
});
如果(!找到){
updateUserList.push(新用户);
}
返回updateUserList;
}
请添加您的尝试。为什么不改为尝试使用?请添加您的尝试。为什么不改为尝试使用?