我需要一个如下数组:
[0: 0, 1: 1, 2: 2]
使用此代码:
var arr = [];
for(i=0; i<3; i++){
arr[i] = i;
}
我的数组看起来像这样:
[0, 1, 2]
然后通过键更新值:
arr[0] = 2.5;
arr[1] = 8.4;
arr[2] = 3.7;
...
最后,arr将按值排序,以便我得到以下顺序:
[[0:2.5],[2:3.7],[1:8.4],...]
答案 0 :(得分:1)
JavaScript中没有关联数组的概念。有些对象是键/值对的集合。对象没有排序,因此无法排序。
如果你想维护秩序,我建议使用一个数组,其元素本身是包含索引和值的元组:
var array = [[0, 0], [1, 1], [2, 2]];
更新值:
array[1][1] = 8.4;
您可以使用
按值排序var sorted_array = array.sort((a, b) => a[1] - b[1])
现在您可以获得与&#34; index&#34;相关联的值。 i
与
sorted_array.find(elt => elt[0] === i)[1]
这种方法似乎比其他需要维护两件事的建议更简单,一个是提供键/值对的对象,另一个是给出有序键列表的数组。
答案 1 :(得分:0)
JavaScript没有关联数组的概念。你必须创建一个对象。
var arr = {};
for(var i=0; i<3; i++) {
arr[i] = i;
}
答案 2 :(得分:0)
您可以使用数组和对象获取值和顺序等信息。
订单存储在order属性中,仍然可以通过(通常的数组)索引访问一个元素。
function sort() {
// get array and sort it and chnage order prop of objects
array.map(function (a, i) { return { index: i, value: a.value }; }).sort(function (a, b) {
return a.value - b.value;
}).forEach(function (a, i) {
array[a.index].order = i;
});
}
function getSortedValues() {
var r = [];
array.forEach(function (a) {
r[a.order] = a.value;
});
return r;
}
// build data structure
var array = [2.5, 8.4, 3.7].map(function (a, i) {
return { value: a, order: i };
});
sort();
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');
// change a value
array[2].value = 9.9;
sort();
document.write('<pre>' + JSON.stringify(getSortedValues(), 0, 4) + '</pre>');
&#13;
答案 3 :(得分:0)
您可以保留两个数据结构:
key => value
访问权限的对象。key
数组。您可以创建一个封装器对象,封装这两个对象并公开API以执行所需的操作(通过键,排序,迭代等访问)。
答案 4 :(得分:0)
你想要的是一个通用对象数组(working pen),因为你似乎想保留每个数组元素的原始索引。基本上你像这样创建数组:
var arr = [];
var ARRAY_SIZE = 3;
for (var i=0, len = ARRAY_SIZE; i < len; ++i){
arr[i] = { id : i, value : null };
}
写下这样的值:
arr[0].value = 2.5;
arr[1].value = 8.4;
arr[2].value = 3.7;
然后排序:
arr.sort(sort_function);
function sort_function (a, b)
{
return a.value - b.value;
}
明确表达你的财产是最好的 - 我选择&#34; id&#34;而不是原始索引&#39;和&#34;价值&#34;而不是隐含的匿名,但根据其在您的应用程序中的角色进行选择。