按两个不同的条件对数组中的对象排序
Sort objects in an array by two different criteria
我有一个像这样的数组:
var arr = [{user: '3', cash: 2},
{user: 'tim', cash: 3},
{user: '5', cash: 2},
{user: 'noah', cash: 3}]
我按收入最高者排序:
arr.sort(function (a, b) {
return b.tS - a.tS;
});
它工作得很好,但是在我对拥有最高现金的人进行排序之后,我还想按用户字段的字母顺序对每个人进行排序。请记住,有些用户可能有数字,但类型是String(不是Number)。
我不能使用库,我希望它能尽可能快地工作。
您可以链接排序标准。
对于前一步为零的每一步都有效。如果值不等于0,则计算下一个delta或比较函数并提前返回。
这里返回的值只有两个排序组,但对于较长的链,将进行下一个比较。
var arr = [{ user: '3', cash: 2 }, { user: 'tim', cash: 3 }, { user: '5', cash: 2 }, { user: 'noah', cash: 3 }];
arr.sort(function (a, b) {
return b.cash - a.cash || a.user.localeCompare(b.user);
});
console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }
要获得带索引的排序,您需要将索引存储在临时数组中,并使用map排序。
var array = [{ user: '3', cash: 2 }, { user: 'tim', cash: 3 }, { user: '5', cash: 2 }, { user: 'noah', cash: 3 }];
// temporary array holds objects with position and sort-value
var mapped = array.map(function(el, i) {
return { index: i, cash: el.cash };
});
// sorting the mapped array containing the reduced values
mapped.sort(function(a, b) {
return b.cash - a.cash || a.index - b.index;
});
// container for the resulting order
var result = mapped.map(function(el){
return array[el.index];
});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
相关文章:
- 为什么typeof的数组的数组的未定义值返回为“0”;未定义的“;我的条件不认为是真的
- Javascript'数组'和'循环'如何“;变量[i]”;是一个条件
- 从json数组中查找满足条件的特定元素的值
- 使用条件for循环更新数组-Javascript
- 根据条件将函数放入数组中(如果选中复选框)
- Javascript-在一个数组中搜索整个单词,并创建一个符合条件的新数组
- 根据某些条件验证用户输入,而不是将输入输入到数组中,需要最基本的解决方案
- Javascript :基于数组的条件循环
- 根据条件 JavaScript 在父级下对类似的数组项进行分组
- 比较数组并使用条件对数组列表进行排序
- 从 JSON 对象数组中获取与条件匹配的文档
- if数组元素在for循环内部有条件
- 带条件的多维数组中的javascript和数组值
- 使用restangular从json对象数组中获取具有特定条件的json对象
- 使用handlers.js模板以数组中的最后一项为条件
- 根据条件从数组中删除对象
- 根据JavaScript中的条件将对象拆分为对象数组
- 使用具有特定条件的 lodash 添加和组合对象数组中的重复项
- 根据某些条件将 JS 绑定到可观察对象内的数组元素
- 将数组的至少“N”个元素与条件列表匹配