【问题标题】:How to sort array of objects in jQuery如何在jQuery中对对象数组进行排序
【发布时间】:2013-08-14 10:17:56
【问题描述】:

我有一个这样的数组

{
    1="Металлургия и производство готовых металлических продуктов",
    2="Химическая промышленность",
    3="Альтернативная энергетика",
    4="Транспортная инфраструктура"
}

我查看了其他类似的问题,但找不到任何东西。

完整代码:

$.getJSON('/project/'+ clicked +'s/', function(data) {

            var info =
                '<td></td>'
                +'<td>'
                    +'<select name="'+ clicked +'_id'+ id +'" id="edit_'+ clicked +'_id'+ id +'">'
                        +'<option value="">'+obj['list_'+lang]+'</option>';

                        for (var i in data) {
                                info += '<option value="'+ i +'">'+ data[i] +'</option>';
                        }
                    info += '</select>'
                +'</td>';

            $('#'+ clicked +'s'+ id).show().html(info);

        });

在数据中,我有一个上面的数组。 我想像这样按字母顺序对它们进行排序: 3="Альтернативная энергетика" 1="Металлургия и производство готовых металических продуктов"

class Controller_Project extends Controller_Website {
public function action_sectors() {
    $sectors = ORM::factory('sector')
        ->find_all()
        ->as_array('id', 'name');

    $ar_sectors = array();
    switch ($this->user_language) {
        case 'ru':
            $ar_sectors[15] = 'Агропромышленный комплекс';
            $ar_sectors[3] = 'Альтернативная энергетика';
            $ar_sectors[7] = 'АПК и текстильная промышленность';
            $ar_sectors[13] = 'Атомная промышленность и атомная энергетика';
            break;
        case 'en':
            $ar_sectors[15] = 'Agricultural Sector';
            $ar_sectors[3] = 'Alternative Energy Industry';
            $ar_sectors[7] = 'Agriculture and textiles';
            $ar_sectors[13] = 'Atomic Industry';
            break;
    }

    $sectors = $ar_sectors;
    $this->auto_render = FALSE;
    $this->request->response = json_encode($sectors);

}

}

代码所在的站点http://new.baseinvest.kz/project

【问题讨论】:

  • 您希望如何对它们进行排序?
  • 这甚至不是有效的 JavaScript。它当然不是对象数组。此伪代码可以描述字符串数组或具有字符串属性的对象。请提供一个正确的例子。我也完全看不出这与 jQuery 有什么关系。
  • 你的意思是{1:"Металлургия...",2:"Химическа.."} 吗?
  • @GeorgeReith 我已提供完整代码

标签: javascript jquery arrays sorting object


【解决方案1】:

您可以使用 JavaScript 的原生 sort 方法并传递您自己的比较函数,具体取决于您希望如何对它们进行排序:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

例如按字母顺序对每个对象的属性进行排序

var arr = [{say: "hi"}, {say: "bye"}];

arr.sort(function(a, b) {
   if (a.say > b.say) {
      return 1;
   }
   if (a.say < b.say) {
      return -1;
   }
   return 0;
});

// arr now equals [{say: "bye"}, {say: "hi"}];

工作示例:http://jsfiddle.net/uKAEz/

编辑:响应您的更新,很明显您不是对对象数组进行排序,而是对字符串数组进行排序。看起来他们也是俄语的。以下应该做你想做的事:

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

有关localCompare 的信息,请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare,它有助于对 unicode 字符串进行排序。

【讨论】:

  • @B.K.什么意思?
  • @B.K.意思是如果它们相同就不要更改它们的顺序(如果需要更改顺序,该函数将已经返回 -11
  • @B.K. return 0 表示不修改本次迭代中的顺序。这是因为如果两个 if 条件都不满足,则两个参数必须相等。数组的其余部分仍然排序。
  • @GeorgeReith 我的数组不是这样,我使用了 console.log,它以这种方式向我展示了 1="Химическая промышленность", 2="...", ...
  • @GalymzhanAigelov 您最初的问题要求对对象数组进行排序。你有一个字符串数组。请参阅我的更新答案。
猜你喜欢
  • 1970-01-01
  • 2021-04-15
  • 2019-11-02
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多