我有一个对象数组。 Array中的每个对象都有一个名为" priorityTag"
的属性我想根据" priorityTag"按升序排序数组。 所以,我写了下面发布的代码,但它不起作用。
请告诉我如何根据" priorityTag"
对数组进行排序注意:priortyTag是Array中包含的对象的属性。换句话说,Array中的每个元素都是一个对象,每个对象都有很多属性,但其中一个属性是" PriorityTag"
我想根据" priorityTag"
对数组进行排序码:
sortFeaturesPerPriority2(arr) {
logger.debug('[sortFeaturesPerPriority2]: arr:', arr);
arr.sort((a, b) => a.priorityTag - b.priorityTag);
}
答案 0 :(得分:0)
要做到这一点,你可以使用我做过的原型
/**
* ARRAY PROTOTYPE SORT BY
* Used to sort an array by object field
* @param {String} field
*/
Array.prototype.sortBy = function (field = '') {
this.sort(function (a, b) {
return a[field] == b[field] ? 0 : +( a[field] > b[field]) || -1;
});
};
您可以这样使用:
let array = [{name: 'Jonh', age: 71}, {name: 'Tracey', age: 58}];
array.sortBy('age');
console.log(array); // Display [ { name: 'Tracey', age: 58 }, { name: 'Jonh', age: 71 } ]
希望它有所帮助。
答案 1 :(得分:0)
假设你在integers like
内有priorityTag
个变量,你需要在排序之前解析它们
sortFeaturesPerPriority2(arr) {
logger.debug('[sortFeaturesPerPriority2]: arr:', arr);
arr.sort(({priorityTag: p1}, {priorityTag: p2}) => parseInt(p1) - parseInt(p2));
}
如果您无法将您的priorityTag解析为数值(假设您有priorityTag == 'a'
或priorityTag == 'b'
),则可以在评论中查看@sander提供的link
并没有真正回答OP的问题,但这里有一种根据属性定义各种排序的简洁方法:
const arr = [
{priorityTag: 'a'},
{priorityTag: 'e'},
{priorityTag: 'd'},
{priorityTag: 'b'},
{priorityTag: 'c'},
];
const numericSort = prop => ({[prop]: a}, {[prop]: b}) => a - b;
const alphaSort = prop => ({[prop]: a}, {[prop]: b}) => a < b ? -1 : 1;
const weirdCustomSort = prop => ({[prop]: a}, {[prop]: b}) => {
const elements = ['a','e','b','d','c'];
const aIndex = ~elements.indexOf(a) ? elements.indexOf(a) : elements.length;
const bIndex = ~elements.indexOf(b) ? elements.indexOf(b) : elements.length;
return aIndex - bIndex;
};
const compareBy = prop => sortFunc => sortFunc(prop)
console.log([...arr].sort(compareBy('priorityTag')(alphaSort)))
console.log([...arr].sort(compareBy('priorityTag')(numericSort)))
console.log([...arr].sort(compareBy('priorityTag')(weirdCustomSort)))
答案 2 :(得分:0)
假设优先级标记是一个数字,那么这看起来是正确的。我尝试使用这些代码然后命令它们
const arr = [
{priorityTag: 1},
{priorityTag: 5},
{priorityTag: 0},
{priorityTag: 2},
{priorityTag: 6},
]
arr.sort( (a,b) => a.priorityTag - b.priorityTag ); // 0,1,2,5,6
如果priorityTag是一个字符串,那么我只会使用以下内容。这实际上适用于字符串和数字,假设您确定默认情况下大于字符串的工作方式。
arr.sort( (a,b) => a.priorityTag > b.priorityTag );