【问题标题】:Moving elements in associative array [duplicate]在关联数组中移动元素[重复]
【发布时间】:2016-01-30 03:09:37
【问题描述】:

我正在使用关联数组来反映 LI 元素的列表:

var array = []
array["cats"] = {k: "cats", v: "meow"};
array["dogs"] = {k: "dogs", v: "woof"};
array["mice"] = {k: "mice", v: "eek"};

我需要保持数组元素的顺序以匹配 LI 元素的顺序。如果我重新排序 LI 元素(例如,将鼠标移动到列表中的第二个位置),我想重新排序数组,以便我可以执行以下操作并看到相同的顺序:

for (var i in array){
    console.log(i);
}

并产生输出:

cats
mice
dogs

由于它是关联的,我不能使用splice 方法。我怎样才能做到这一点?

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    你不能这样做,JavaScript 中没有关联数组——它们是对象(没有排序),这只是表示它们的一种方式。 obj.something 等于 obj['something']

    为了保持顺序,我建议你使用一个对象数组:

    var arr = [{k: "cats", v: "meow"}, {k: "dogs", v: "woof"}, {k: "mice", v: "eek"}];
    

    数组可以排序。

    【讨论】:

    • 我不习惯“做不到”的答案。我对这个限制感到惊讶,但似乎我有 3 个选择:1)从我当前的数组中取出索引,这就是你的答案,2)向我可以处理的对象添加一个“位置”属性 3 ) 添加按正确顺序排序的第二个并行数组。我会选择选项 #2,因为它最适合我的目的。感谢您的回复。
    • 对不起,不应该只是“不能做”,而是“不能用对象做”,因为它们没有顺序的概念。我也认为一切皆有可能。 :) “位置”属性会很好地为您服务,但是对于诸如性能或元素的轻松渲染(仅使用常规 for 循环)之类的事情,我会选择我的答案 - 使该数组成为那些的实际表示元素。不客气!
    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 2012-12-01
    • 2017-04-04
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2012-12-19
    • 2018-03-21
    相关资源
    最近更新 更多