javascript - 如何在javascript中覆盖多维数组中的数据?

标签 javascript html arrays

我得到一个多维数组,其中每个数组都是所有用户信息(由用户输入)的组合

我希望用户能够修改他的信息,例如他的姓名或电话号码,以便用户下次登录时显示他的新信息。

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。

最佳答案

最简单的方法是使用索引选择器直接修改数据:

This approach mutates the initial array instead of returning a new reference, which can lead to unwanted side effects.

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' /* ... */ }
 // ...
]

关于javascript - 如何在javascript中覆盖多维数组中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45921377/

相关文章:

javascript - 隐形验证码 - 挑战未出现

javascript - 我想将行号添加到我网站上的代码示例中。我想通过 CSS(生成的内容?)或 javascript 来做到这一点

html - 如何更改无序列表中点的颜色?

javascript - 选择 1 后无法切换到下一个案例

javascript - 通过 POST 将 JavaScript 变量发送到 PHP

javascript - 来自 python 对象的 JSON 编码?

javascript - Docker容器nodejs连接外部mysql失败

java - 单击时更改 JButton ImageIcon

c - 在包含字符串的结构上使用 qsort

C - 两个数组之间的 AND 运算符