你所描述的不是一個多維數組,它的對象或地圖的數組。假設對象:
chat1 = [
{ nickname: 'ethelred',
status: 'admin'},
{ nickname: 'alfred',
status: 'none' },
{ nickname: 'canute',
status: 'none' }
]
// This is all that's needed for a very simple sort:
chat1.sort((a,b) => a.nickname > b.nickname)
這將排序,並給你[{nickname: 'alfred', status: 'none' }, {nickname: 'canute', status: 'none' }, { nickname: 'ethelred', status: 'admin'}]
// You can continue to transform the data,
// for example, just pull the user nicknames:
chat1.sort((a,b) => a.nickname - b.nickname)
.map(user => user.nickname)
這將排序,然後在生成的分類陣圖給你按字母順序排列的用戶列表 - ['alfred','canute','ethelred']
。
注,這是幼稚的,你需要更好的邏輯排序功能(用大寫字母,數字,數字字母混合,&Ç發生了什麼?)。但是這個功能是完全孤立的。你只寫一個單獨的(啞)函數,它什麼都不知道關於你的聊天室對象,並傳遞到sort()
與a.nickname
和b.nickname
作爲參數 - chat1.sort(myFunkySortFunction(a.nickname, b.nickname))
(或您內聯的邏輯,做不是抽象的它,無論是簡單的)。
你會開始得到的問題,如果你有很多用戶,因爲你需要運行這個在每個加入/離開事件。那時你需要更強大的東西。
EDIT1:
所以,當有新成員加入,他們要麼得到。 .push()
- 放到原始陣列上,或者b。你用新人的對象創建一個新的數組。當一個人離開時,他們要麼是一個人。從原始數組中移除,或者b。將創建一個不包含它們的新數組。
當這些事件發生時,您可以運行排序功能。你需要看看Array.prototype.sort()
method。這應該是你唯一需要的東西。
注意,就是我的建議是不是很有效,它只是做的工作,是非常簡單的。
重新傳遞給排序功能a.nickname > b.nickname
是不會工作得很好。 A-Z
將在a-z
之前。 'Xerxes'會在'albert'之前出現。你可以這樣做:
chat1.sort(function(a,b) {
return a.nickname.toLowerCase() > b.nickname.toLowerCase();
})
所以這將整理出來。但你仍然有一個更復雜的名字的問題:它值得看看像這裏描述的健壯的東西:Javascript : natural sort of alphanumerical strings
基本上,你在做什麼並不難:你只需要確保在該回調函數,則指定您正在抓取nickname
屬性,否則它會嘗試基於整個對象進行排序,並返回奇怪的錯誤結果。
[很晚] EDIT2
我才意識到,你問到如何添加和刪除。保持與上述其餘部分一樣的功能主題:添加您可以使用Array.prototype.concat()
創建一個包含額外用戶的新數組。要刪除,Array.prototype.filter()
將返回一個刪除特定用戶的新陣列。
所以加:
current = [
{ nickname: 'ethelred',
status: 'admin'},
{ nickname: 'alfred',
status: 'none' },
{ nickname: 'canute',
status: 'none' }
]
current.concat({ nickname: 'offa', status: 'none' })
// [{ nickname: 'ethelred', status: 'admin'}, { nickname: 'alfred', status: 'none'}, { nickname: 'canute', status: 'none'}, { nickname: 'offa', status: 'none'}]
要刪除:
current = [
{ nickname: 'ethelred',
status: 'admin'},
{ nickname: 'alfred',
status: 'none' },
{ nickname: 'canute',
status: 'none' }
]
current.filter({nickname} => nickname !== 'canute')
// [{ nickname: 'ethelred', status: 'admin'}, { nickname: 'alfred', status: 'none'}]
謝謝!我需要查看哪些功能來添加/刪除等?即按照頂部的示例創建? – Jack
添加了一個編輯答案,而不是添加評論:) – DanCouper
剛剛看到,我沒有真正回答你的評論:增加了一些更多的信息。閱讀MDN上的Array原型方法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype – DanCouper