2017-08-28 69 views
0

我有一個多維數組,其中每個數組裏面(放在用戶)的所有用戶信息的組合如何覆蓋JavaScript中的多維數組中的數據?

我希望用戶能夠修改自己的信息,比如他的姓名或電話號碼,以便下次用戶登錄時,顯示他的新信息。

userList保存在JSON上,這個想法應該是保存更改並從那裏加載。

例子:

如果我的陣列有

userList= JSON.parse(localStorage.getItem('userListLS') 
    if(userList == null) { 
userList = 

     [ 
     ['Isaac', 'Garth', '[email protected]', 'Mazda'] 
     ['Matthew', 'Miller', '[email protected]', 'Volvo'] 
     ] 
} 

,並讓說,艾薩克登錄,他希望改變他的名字Gabriel和更改電子郵件至[email protected],使新陣列將是:

userList= [ 
     ['Gabriel', 'Garth', '[email protected]', 'Mazda'] 
     ['Matthew', 'Miller', '[email protected]', 'Volvo'] 
     ] 

這怎麼可能完成?

只有JS和HTML請。

+0

@IssacG你只想要JS解釋或HTML標籤嗎? –

+0

你可以改變結構嗎?我建議使用一個對象數組而不是數組數組, –

+0

你好。我編輯線程提到我正在使用JSON,稍微修改了代碼以顯示加載JSON保存的示例。 JS的解釋可以,我已經在使用HTMl表單的contenteditable。數據正在更新,只是沒有保存。順便說一句我正在使用數組數組(我認爲這就是所謂的矩陣?),因爲它是我知道的唯一方法,我不知道對象數組是什麼。 – IsaacG

回答

1

的最簡單的方法是直接修改使用索引選擇器中的數據:

這種方法變異,而不是返回一個新的參考,這可能會導致不希望的副作用的初始陣列。

function modifyData(data, userId, fieldId, newData) { 
 
    if(data[userId] && data[userId][fieldId]) { 
 
     data[userId][fieldId] = newData; 
 
    } 
 
    return data; 
 
} 
 

 
// example 
 
var userList= [ 
 
    ['Isaac', 'Garth', '[email protected]', 'Mazda'], 
 
    ['Matthew', 'Miller', '[email protected]', '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', '[email protected]', 'Mazda'], 
 
    ['Matthew', 'Miller', '[email protected]', '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' /* ... */ } 
// ... 
] 
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:"[email protected]", 
car:"VW" 
}); 

//get an array of users again 
userList = [...users.values()];