我有一个像这样的数组
JSONObject json = data[0];
它可以对数组进行排序并保留原始索引吗?
示例:
按y属性显示数组:
' C&#39 ;, ' A&#39 ;, ' B'
按索引显示数组:
' A&#39 ;, ' B&#39 ;, ' C'
我希望你能帮助我。谢谢你的阅读。
答案 0 :(得分:1)
您可以映射数组以保留数组对象中的索引:
{{ Add }}
然后对其进行排序:
var myArray = [
{name: 'A', y: 10},
{name: 'B', y: 20},
{name: 'C', y: 5}
];
myArray = myArray.map(function(item, index) {
item.index = index;
return item;
});
答案 1 :(得分:1)
您可以编写一个按属性排序的函数:
var sortBy = function(prop){
return function(el1, el2){
return el1[prop]>el2[prop];
};
};
然后您可以使用y
的数组myArray.sort(sortBy('y'))
或name
myArray.sort(sortBy('name'))
进行排序。您可以通过索引访问原始数组。或者你可以像madox2那样添加一个名为index的新属性。
答案 2 :(得分:1)
在负责排序类型的函数中使用map进行排序。返回一个新数组,其中包含对原始对象的引用。
function sort(array, key, isString) {
return array.map(function (_, i) { return i; }).sort(
isString ?
function (a, b) { return array[a][key].localeCompare(array[b][key]); } :
function (a, b) { return array[a][key] - array[b][key]; }
).map(function (i) { return array[i]; });
}
var myArray = [
{ name: 'B', y: 20 },
{ name: 'C', y: 5 },
{ name: 'A', y: 10 }
];
document.write('<pre>sort by name: ' + JSON.stringify(sort(myArray, 'name', true), 0, 4) + '</pre>');
document.write('<pre>sort by y: ' + JSON.stringify(sort(myArray, 'y'), 0, 4) + '</pre>');
document.write('<pre>original array: ' + JSON.stringify(myArray, 0, 4) + '</pre>');
&#13;