2015-10-15 255 views
-2

藉此例如:如何通過一個字符串屬性進行排序對象的數組

var data = [ 
{ name: 'Random 100 Index' }, 
{ name: 'Random 25 Index' }, 
{ name: 'Random 75 Index' }, 
{ name: 'Random 50 Index' } ]; 

我要作爲排序依據升序排列屬性這個數組。我已經試過各種方法與jQuery & Underscore.js,我沒有得到我所期待的。問題是,隨機100指數將排序後的數組中的第一項。 拿這個功能,例如:

function sortByProperty(property) { 
'use strict'; 
return function (a, b) { 
    var sortStatus = 0; 
    if (a[property] < b[property]) { 
     sortStatus = -1; 
    } else if (a[property] > b[property]) { 
     sortStatus = 1; 
    } 
    return sortStatus; 
}; } 

當我做var result = data.sort(sortByProperty('name'));結果如下:

[{ name: 'Random 100 Index' }, { name: 'Random 25 Index }, { name: 'Random 50 Index' }, { name: 'Random 75 Index' } ] 

該項目已被正確排序,除了隨機100指數應該是最後一個項目。

我該如何解決這個問題?你如何排序這樣的字符串數組?

+0

你指的是數量應該是排序的繞圈? – Alex

+3

很好的結果是正確的,100自帶25日之前按字母順序排列。 –

+0

這裏有什麼「underscore.js」標籤? – hindmost

回答

4

您可以使用sort()match()。查找使用match()字符串整數值的基礎上,那種與sort()幫助陣列。

var data = [{ 
 
    name: 'Random 100 Index' 
 
}, { 
 
    name: 'Random 25 Index' 
 
}, { 
 
    name: 'Random 75 Index' 
 
}, { 
 
    name: 'Random 50 Index' 
 
}]; 
 

 

 
var res = data.sort(function(a, b) { 
 
    return a.name.match(/\d+/)[0] - b.name.match(/\d+/)[0]; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(res,null,2) + '</pre>');

UPDATE:它只會排序基於字符串中數字第一次出現。

+0

你也可以直接寫'data = data.sort'。此外,您可能需要'parseInt'匹配結果 – Alex

+1

此代碼僅適用於嚴格模板「隨機N指數」。 – hindmost

1

結果與臨時存儲的索引和值的對大型數據集。

var data = [ 
 
     { name: 'Random 100 Index' }, 
 
     { name: 'Random 25 Index' }, 
 
     { name: 'Random 75 Index' }, 
 
     { name: 'Random 50 Index' } 
 
    ], 
 
    result = data.map(function (el, i) { 
 
     return { 
 
      index: i, 
 
      value: /\d+/.exec(el.name)[0] 
 
     }; 
 
    }).sort(function (a, b) { 
 
     return a.value - b.value; 
 
    }).map(function (el) { 
 
     return data[el.index]; 
 
    }); 
 

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

+0

謝謝@Nina這個作品。我正在測試你的解決方案和** Pranav **的幾個數據集,我會用我的結果更新條目。 – Nexus

+0

@Nexus,它適合你嗎? –

-1

由於Pranavç巴蘭尼娜肖爾茨我已經想出了以下解決方案。

要按字母順序排序的數組:

function sortByProperty(property) { 
 
    'use strict'; 
 
    return function (a, b) { 
 
     var sortStatus = 0; 
 
     if (a[property] < b[property]) { 
 
      sortStatus = -1; 
 
     } else if (a[property] > b[property]) { 
 
      sortStatus = 1; 
 
     } 
 
    
 
     return sortStatus; 
 
    }; 
 
} 
 

 
var result = data.sort(sortByProperty('name'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

以及基於屬性的文本中找到的第一位數字數組排序:

var res2 = res1.sort(function(a, b) { 
 
    return a.name.match(/\d+/)[0] - b.name.match(/\d+/)[0]; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

非常簡單。 謝謝大家:)

+0

對於字符串排序,我建議使用'String.prototype.localeCompare',例如'函數sortByProperty(屬性){ \t \t \t返回功能(A,B){ \t \t \t \t返回一個[屬性] .localeCompare( b [屬性]); \t \t \t} \t \t}'。 –

相關問題