我有一个多维数组,其中每个数组都是所有用户信息的组合(由用户输入)
我希望用户能够修改他的信息,例如他的姓名或电话号码,以便下次用户登录时,会显示他的新信息。
userList保存在JSON上,我们的想法是从那里保存和加载更改。
示例:
如果我的数组有
userList= JSON.parse(localStorage.getItem('userListLS')
if(userList == null) {
userList =
[
['Isaac', 'Garth', 'IsaacG11@email.com', 'Mazda']
['Matthew', 'Miller', 'mmiller21@mail.com', 'Volvo']
]
}
让我们说Isaac已登录,他希望将自己的名字改为Gabriel并将电子邮件更改为IsaacG21@email.com,以便新阵列成为:
userList= [
['Gabriel', 'Garth', 'IsaacG21@email.com', 'Mazda']
['Matthew', 'Miller', 'mmiller21@mail.com', 'Volvo']
]
怎么可以实现呢?
只有JS和HTML。
答案 0 :(得分:1)
最简单的方法是使用索引选择器直接修改数据:
这种方法改变了初始数组,而不是返回一个新的引用,这可能导致不必要的副作用。
function modifyData(data, userId, fieldId, newData) {
if(data[userId] && data[userId][fieldId]) {
data[userId][fieldId] = newData;
}
return data;
}
// example
var userList= [
['Isaac', 'Garth', 'IsaacG11@email.com', 'Mazda'],
['Matthew', 'Miller', 'mmiller21@mail.com', 'Volvo']
];
const FIELD_NAME_ID = 0;
const USER_ID = 0;
var modified = modifyData(userList, USER_ID, FIELD_NAME_ID, 'Morty')
console.log('initial', userList);
console.log('modified', modified);

不可变的方法是:
function modifyData(data, userId, fieldId, newData) {
if(data && data[userId] && data[userId][fieldId]) {
var _data = data.slice();
var _user = data[userId].slice();
_user[fieldId] = newData;
_data[userId] = _user;
return _data;
}
return data;
}
// example
var userList= [
['Isaac', 'Garth', 'IsaacG11@email.com', 'Mazda'],
['Matthew', 'Miller', 'mmiller21@mail.com', 'Volvo']
];
const FIELD_NAME_ID = 0;
const USER_ID = 0;
var modified = modifyData(userList, USER_ID, FIELD_NAME_ID, 'Morty');
console.log('initial', userList);
console.log('modified', modified);

但是你应该考虑将你的结构改为对象字典:
{
user1: { name: 'Isaac', lastName: 'Garth' /* ... */ }
// ...
}
或一组对象(但是你必须在数组中找到合适的用户:
[
{ name: 'Isaac', lastName: 'Garth' /* ... */ }
// ...
]
答案 1 :(得分:0)
地图的一个很好的用例:
const users = new Map(
userList.map(
( [first,name,email,car]) => [first, { first,name,email,car }]
)
);
所以要更改某些用户的电子邮件:
users.get("Isaac").email = "test @ gmail.com";
更多用例:
//set a whole user:
users.set("Jack", {
first:" Jack",
name:"Daniels",
email:"me@example.com",
car:"VW"
});
//get an array of users again
userList = [...users.values()];