不知道位置时修改数组对象

时间:2019-05-29 03:39:06

标签: javascript

考虑数组对象

const userDetails = [
{
 name: 'Varun' 
 age: '18'
 userID: 'jqjjqjq881',
 someOtherObj: {
 //Nested object
 }
},
{
 name: 'Vkn' 
 age: '19'
 userID: 'j9jjqam880',
 someOtherObj: {
 //Nested object
 }
}]

现在,我想在修改数组内部的对象时更新数组。

我将Varun的名称更改为Rahul

const updatedUserDetails = {
 name: 'Rahul' 
 age: '18'
 userID: 'jqjjqjq881',
 someOtherObj: {
 //Nested object
 }
}

这里的userID始终保持一致,但是对象在数组中的位置不是恒定的,即

 const userDetails = [
    {
     name: 'Vkn' 
     age: '19'
     userID: 'j9jjqam880',
     someOtherObj: {
     //Nested object
     }
    },
    {
     name: 'Varun' 
     age: '18'
     userID: 'jqjjqjq881',
     someOtherObj: {
     //Nested object
     }
    }
   }
 ]

我想用阵列中的这个新对象(updatedUserDetails)替换现有对象(userDetails)

const userDetails = [
    {
     name: 'Vkn' 
     age: '19'
     userID: 'j9jjqam880',
     someOtherObj: {
     //Nested object
     }
    },
    {
     name: 'Rahul' 
     age: '18'
     userID: 'jqjjqjq881',
     someOtherObj: {
     //Nested object
     }
    }
   }
 ]

同样,对象在数组中的位置不会总是相同的(可能是0或1,如果有更多的对象,则是n),但是对象内部的userID会是。

2 个答案:

答案 0 :(得分:0)

只需添加此功能即可应用更改

UpdateUser = function(updatedUser, listOfUsers) {
    listOfUsers[listOfUsers.findIndex(e => e.userID === updatedUser.userID)] = updatedUser
}

在您的示例中,您需要使用以下参数运行此函数以更新阵列

UpdateUser(updatedUserDetails, userDetails)

答案 1 :(得分:0)

使用find()方法查找对象而不是对其进行编辑。

const userDetails = [
{
 name: 'Varun' ,
 age: '18',
 userID: 'jqjjqjq881',
 someOtherObj: {
 //Nested object
 }
},
{
 name: 'Vkn' ,
 age: '19',
 userID: 'j9jjqam880',
 someOtherObj: {
 //Nested object
 }
}];

console.log(userDetails);
let obj = userDetails.find(x => {return x.name == "Varun"})
if(obj)
{
  obj.name = "Rahul"
}
console.log(userDetails);