【问题标题】:Keep keys with their values after values have been sorted in array?在数组中对值进行排序后,保留键的值吗?
【发布时间】:2013-07-25 00:10:46
【问题描述】:

我对 JavaScript 完全陌生;请随时纠正我的技术术语。

我有一组键值对被附加到一个列表中。该列表显示为下拉菜单,其中键的值是显示的选项,并且键包含在 HTML 标记中。我的老板让我按字母顺序对显示的值进行排序。

到目前为止,我已经使用 for...in 循环遍历对象并将每个键的值提取到一个数组中。我对数组进行了排序,现在可以按字母顺序将值附加到列表中。

保持键链接到它们各自值的最佳方法是什么,以便在我附加值时也可以添加它们相应的键?

谢谢。

简短版:在将所有值复制到数组并按字母顺序排序后,如何将键匹配回它们的值?

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    您可以在没有单独数组的情况下执行此操作。只需使用比较功能(即比较器)。例如:

    var arr = [
        {k: "c", v: 3},
        {k: "b", v: 2},
        {k: "d", v: 4},
        {k: "a", v: 1},
        {k: "e", v: 5}
    ];
    
    //sort by value
    arr.sort(function(a, b) {
       return a.v - b.v;
    });
    

    这给了你:

    [
       {
          "k": "a",
          "v": 1
       },
       {
          "k": "b",
          "v": 2
       },
       {
          "k": "c",
          "v": 3
       },
       {
          "k": "d",
          "v": 4
       },
       {
          "k": "e",
          "v": 5
       }
    ]
    

    要根据字符串值进行排序,您可以:

    arr.sort(function(a, b) {
        return a.v.localeCompare(b.v);
    });
    

    【讨论】:

      【解决方案2】:

      不要单独对值进行排序,而是通过二维数组进行排序——数组的数组。

      所以它看起来像

      Key1 | Val1
      -----------
      Key2 | Val2
      -----------
      Key3 | Val3
      

      然后根据值进行排序,但同时移动两者。

      排序后的样子

      Key3 | Val3
      -----------
      Key1 | Val1
      -----------
      Key2 | Val2
      

      然后,当您引用第一个值时,您使用array[0][1],对于该值的键,您将使用array[0][0]

      【讨论】:

        【解决方案3】:

        您需要一个自定义排序功能。

        var ar = [ {key: 1, value: "One"}, {key: 2, value: "Two"}, {key: 3, value: "Three"} ];
        
        var sortFunction = function(kv1, kv2) {
            return kv1.value.localeCompare(kv2.value);
        };
        
        ar.sort(sortFunction);
        

        【讨论】:

          猜你喜欢
          • 2013-03-23
          • 1970-01-01
          • 2014-03-21
          • 2012-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多