【发布时间】:2016-03-03 11:46:26
【问题描述】:
在我看来,javascript 的一大缺点是没有关联数组。对象不提供顺序,数组不提供键。
数组也有可能包含对象:
[{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"));
我知道这远非完美,这只是第一次尝试看看它是否有效。我只是想知道为什么我找不到任何类似的解决方案。
这种方法是否已弃用?如果是,最好的选择是什么?
我的最低要求是:
- 按键访问元素(检索/更改值)
- 维护元素顺序
- 按键和值对元素进行排序
【问题讨论】:
-
看看 ES6 映射:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…。更改原生原型被认为是不好的做法。
-
有一些库可以解决这些问题,尤其是在使用原型时,无需重新发明轮子
-
@am2124429 “数组不提供密钥” 是什么意思?您想使用字母访问数组的元素吗?例如,
arr[a]? -
不幸的是,以最佳实践为中心的问题并不适合 Stack Overflow,因为它们主要会产生基于意见的答案(“我喜欢这样做......”,“人们通常使用这个...... 。”)。虽然您可能会根据作者认为的“最佳实践”看到其他问题的答案,但专门询问它们是题外话。有关详细信息,请参阅help center。
-
@GeoPhoenix:这将是一个很大的帮助。可以举个例子吗?
标签: javascript arrays sorting hash