在我看來,JavaScript的一大缺點是沒有關聯數組。對象不提供順序,數組不提供密鑰。Javascript:通過改變Array.prototype關聯數組 - 已棄用?
還有陣列的可能性包含對象:
[{key1:value1}, {key2:value2}]
但據我所知,有訪問由密鑰元素在這個方法(而不必通過所有元素進行迭代)沒有簡單的方法。
這就是爲什麼我開始思考下面的辦法,即通過添加元素映射形成陣列關聯:
Array.prototype.addKeyToLastElement = function(key) {
if (!this.elementMapper) this.elementMapper = {};
this.elementMapper[key] = this.length-1;
}
Array.prototype.getElementByKey = function(key) {
if (this.elementMapper && this.elementMapper[key] !== undefined) {
return this[this.elementMapper[key]];
}
else {
return undefined;
}
}
var test = [];
test.push(1);
test.addKeyToLastElement('a');
test.push(3);
test.addKeyToLastElement('b');
// get element by key
console.log(test.getElementByKey("a"));
我知道,這是遠遠不夠完善,這只是第一次嘗試,看看如果它有效。我只是想知道爲什麼我找不到任何類似的解決方案。
此方法是否被棄用?如果是,那麼最好的選擇是什麼?
我的最低要求是:
- 訪問的鍵(檢索/改變值)
- 保持的元素都是由key和value訂購
- 排序元素來
看一看ES6地圖:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map。改變原生原型被認爲是不好的做法。 – nils
有解決這些問題的庫,沒有必要重新開發車輪,尤其是在使用原型時 – Gntem
@ am2124429您的意思是_「陣列不提供密鑰」_?你想使用字母訪問數組的元素嗎?例如'arr [a]'? – guest271314