基于数组元素中的子字符串对Javascript数组进行排序

时间:2016-01-18 09:52:45

标签: javascript arrays sorting substr

JSONObject jsonObject = jsonArray1.getJSONObject(i); 
Iterator<String> iter = jsonObject.keys();
while (iter.hasNext()) {
    String key = iter.next();
    try {
        JSONArray jsonArray=jsonObject.getJSONArray(key);
    } catch (JSONException e) {
        // Something went wrong!
    }
}

如果我有一个如上所示的数组,我需要根据字符串中的子字符串值对数组进行排序 - 即一,二,三.., 解决问题的最佳方法是什么?

我的最终结果应该是

var arr = ["This is three", "This is four", "This is one", "This is two", ...];

1 个答案:

答案 0 :(得分:2)

此解决方案使用带数字的数组,并在字符串中查找数字,并返回索引以进行排序。

对于较大的阵列,我建议使用sorting with map

var sortedArr = ["This is four", "This is two", "This is one", "This is three"];

sortedArr.sort(function (a, b) {
    function getNumber(s) {
        var index = -1;
        ['one', 'two', 'three', 'four'].some(function (c, i) {
            if (~s.indexOf(c)) {
                index = i;
                return true;
            }
        });
        return index;
    }
    return getNumber(a) - getNumber(b);
});

document.write('<pre>' + JSON.stringify(sortedArr, 0, 4) + '</pre>');

编辑:

  

~bitwise not operator。它非常适合与indexOf()一起使用,因为indexOf如果找到索引0 ... n则返回,如果不是-1则返回:

value  ~value   boolean
 -1  =>   0  =>  false
  0  =>  -1  =>  true
  1  =>  -2  =>  true
  2  =>  -3  =>  true
  and so on