首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过传递所需字段的字符串值来排序列表,在JavaScript中按日期进行第二次排序

通过传递所需字段的字符串值来排序列表,在JavaScript中按日期进行第二次排序
EN

Stack Overflow用户
提问于 2015-12-26 15:51:15
回答 2查看 76关注 0票数 0

我有一个Javascript列表

代码语言:javascript
复制
var list = [
{ date: "2005-04-01", position: 12, worker: "John",     prop: "k11" },
{ date: "2006-02-01", position: 72, worker: "John",     prop: "k12" },
{ date: "2005-09-06", position: 42, worker: "Aleks",    prop: "k43" },
{ date: "2004-07-02", position: 12, worker: "Mark",     prop: "k12" },
];

我想要创建一个像list.sort(' position ','12')这样的排序函数,它将按值'12‘为位置字段排序列表,并给出输出。

日期:"2005-04-01",职位: 12,工人:“约翰”,道具:"k11“

日期:"2004-07-02",职位: 12,工人:“标记”,道具:"k12“

日期:"2006-02-01",职位: 72,工人:“约翰”,道具:"k12“

日期:"2005-09-06",职位: 42,工人:"Aleks",道具:"k43“

但是你也可以把它叫做list.sort(' worker ','John'),它也会按日期对它进行排序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-26 18:27:55

这是对给定的键/值对进行特权排序的建议。

功能:

  • 特权密钥/值的闭包,返回
  • 用于排序的函数
    • 移动到顶部的键/值
    • 按日期降序排序

代码语言:javascript
复制
var list = [
    { date: "2005-04-01", position: 12, worker: "John", prop: "k11" },
    { date: "2006-02-01", position: 72, worker: "John", prop: "k12" },
    { date: "2005-09-06", position: 42, worker: "Aleks", prop: "k43" },
    { date: "2004-07-02", position: 12, worker: "Mark", prop: "k12" },
];

function setCondition(condition) {
    var key = Object.keys(condition)[0],
        value = condition[key];
    return function (a, b) {
        function x(o) { return -(o[key] === value); }
        return x(a) - x(b) || b.date.localeCompare(a.date);
    }
}

document.write('<pre>' + JSON.stringify(list.sort(setCondition({ position: 12 })), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(list.sort(setCondition({ worker: 'John' })), 0, 4) + '</pre>');

票数 1
EN

Stack Overflow用户

发布于 2015-12-26 17:00:41

如果一个新的引用是好的,找到所有匹配,找到所有非匹配,连接这两个数组。

代码语言:javascript
复制
function bringToTop(arrOfObj, prop, val) {
    return arrOfObj.filter(e => e[prop] === val).concat(
        arrOfObj.filter(e => e[prop] !== val)
    );
}

例如:

代码语言:javascript
复制
var arr = [
    {foo: 0, bar: 0, baz: 'fizz'},
    {foo: 0, bar: 1, baz: 'buzz'},
    {foo: 1, bar: 0, baz: 'fizz'},
    {foo: 1, bar: 1, baz: 'buzz'}
];

bringToTop(arr, 'baz', 'buzz');
/*
[
    {foo: 0, bar: 1, baz: 'buzz'},
    {foo: 1, bar: 1, baz: 'buzz'},
    {foo: 0, bar: 0, baz: 'fizz'},
    {foo: 1, bar: 0, baz: 'fizz'}
]
*/

如果您想要相同的结果,请接受这个结果,清空原来的结果,然后按下结果。

代码语言:javascript
复制
var res = bringToTop(arr, 'baz', 'buzz');
arr.length = 0;
Array.prototype.push.apply(arr, res);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34472848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档