Javascript:通过更改 Array.prototype 的关联数组 - 已弃用
Javascript: Associative arrays by altering Array.prototype - deprecated?
在我看来,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"));
我知道这远非完美,这只是第一次尝试看看它是否有效。我只是想知道为什么我找不到任何类似的解决方案。
此方法是否已弃用?如果是,最好的选择是什么?
我的最低要求是:
- 按键访问元素(检索/更改值)
- 维护元素顺序
- 按键和值对元素进行排序
数组不提供键
但据我所知,没有简单的方法可以通过键访问元素 在这种方法中(不必遍历所有元素)
如果正确解释问题,则可以分配字母或其他"键"作为索引标识符,并使用数字标识符访问数组中的相同元素
var alphabet = "abcdefghijklmnopqrstuvwxyz";
var arr = [];
for (var i = 0; i < alphabet.length; i++) {
arr[alphabet[i]] = arr[i] = alphabet[i]
};
console.log(arr["a"], arr[0], arr["z"], arr[25])
此方法是否已弃用?如果是,最好的选择是什么?
它没有被弃用,但它不是一个好主意,因此由于以下主要原因,这是一种糟糕的编码实践
- 这些额外的属性不包括在 JSON 序列化中。
- 如果您执行像 arr = arr.slice(1) 这样的数组操作,这些属性将被丢弃,这会导致意外行为。
但是您仍然可以像这样对对象进行排序(在您的问题中)
[{key1:value1}, {key2:value2}]
通过做
var arr = [{key1:value1}, {key2:value2}];
arr.sort(function(a,b){
return a[Object.keys(a)[0]] - b[Object.keys(b)[0]];
})
相关文章:
- 多维关联数组的最后一个索引
- node.js/javascript/couchdb视图到关联数组似乎不起作用
- 具有关联数组数据集的D3.js表
- 后关联数组使用jquery ajax
- 返回一个关联数组,而不是mongoose中的文档数组
- 如何在 Angular JS 中从关联数组创建多个复选框
- 存储在变量中的关联数组中的访问键
- 如何在具有相同 ID 的 Javascript 中按排序函数对关联数组进行排序
- 在主要的JavaScript引擎中,在JavaScript关联数组(动态对象属性)中检索/插入的复杂性是多少
- 关联数组,并使用父数组d作为selection.data()的源数组
- 获取关联数组的标签
- JavaScript:如何在最接近值的关联数组中查找键
- 单击时显示关联数组的元素
- 关联数组 - 使用图像滑块显示键值
- Javascript从关联数组中查找最低数字(气泡排序方法)
- AngularJS过滤器不适用于我的数据:关联数组
- 获取关联数组中当前函数的键
- 如何按一个仍保持字母顺序的特性值(另一个特性值)对关联数组进行排序
- 正在检查JavaScript中是否存在关联数组
- 二维对象/将数组关联到三维对象Javascript中