具有两个属性的Javascript排序
我正在努力将两个级别进行分类。逻辑如下。如果任何对象具有状态,则返回具有状态的最新对象。如果没有对象具有状态,则返回没有状态的最新对象具有两个属性的Javascript排序,javascript,underscore.js,Javascript,Underscore.js,我正在努力将两个级别进行分类。逻辑如下。如果任何对象具有状态,则返回具有状态的最新对象。如果没有对象具有状态,则返回没有状态的最新对象 var apps = [ { status: 'PASS', date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT) }, { status: 'FAIL', date_created: Thu Sep 02 2015 17:24:45 GMT-0700 (PDT), },
var apps = [
{ status: 'PASS',
date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
},
{ status: 'FAIL',
date_created: Thu Sep 02 2015 17:24:45 GMT-0700 (PDT),
},
{ status: '',
date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT),
}
]
var desired_result = [{ status: 'PASS',
date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
}]
var apps_2 = [
{ status: '',
date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
},
{ status: '',
date_created: Thu Sep 02 2015 17:24:45 GMT-0700 (PDT),
},
{ status: '',
date_created: Thu Sep 01 2015 17:24:45 GMT-0700 (PDT),
}
]
var desired_resul2 = [{ status: '',
date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
}]
我试过了
var sorted = _.sort_by(apps, function (x) { x.date_updated });
我还查看了其他一些SO,但在第一次排序后无法将对象保持在适当的位置 如果我没弄错你的问题,这就是你要找的 您需要过滤元素,以确保它们具有任何类型的状态。然后按日期排序,最早的先排序。然后得到第一个值。在我的示例中,我假设了字符串所在的日期,但仍然可以使用
var apps = [
{ status: 'PASS',
date_created: 'Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)'
},
{ status: 'FAIL',
date_created: 'Thu Sep 02 2015 17:24:45 GMT-0700 (PDT)',
},
{ status: '',
date_created: 'Thu Sep 01 2015 17:24:45 GMT-0700 (PDT)',
}
];
var x;
var arr = _.filter(apps, function(data) {
return !!data.status.length;
});
x = _.chain( arr.length ? arr : apps )
.sortBy(function(data) {
return new Date(data.date_created).getTime();
}).last().value();
console.log( x );
要在未提供状态时检查其是否工作:
我希望这有帮助。LMK,如果需要进一步澄清
编辑:更新以获取最新元素(最后一个)。如果我正确理解您的问题,以下是您要查找的内容 您需要过滤元素,以确保它们具有任何类型的状态。然后按日期排序,最早的先排序。然后得到第一个值。在我的示例中,我假设了字符串所在的日期,但仍然可以使用
var apps = [
{ status: 'PASS',
date_created: 'Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)'
},
{ status: 'FAIL',
date_created: 'Thu Sep 02 2015 17:24:45 GMT-0700 (PDT)',
},
{ status: '',
date_created: 'Thu Sep 01 2015 17:24:45 GMT-0700 (PDT)',
}
];
var x;
var arr = _.filter(apps, function(data) {
return !!data.status.length;
});
x = _.chain( arr.length ? arr : apps )
.sortBy(function(data) {
return new Date(data.date_created).getTime();
}).last().value();
console.log( x );
要在未提供状态时检查其是否工作:
我希望这有帮助。LMK,如果需要进一步澄清
编辑:更新以获取最新元素(最后一个)。如果我正确理解您的问题,以下是您要查找的内容 您需要过滤元素,以确保它们具有任何类型的状态。然后按日期排序,最早的先排序。然后得到第一个值。在我的示例中,我假设了字符串所在的日期,但仍然可以使用
var apps = [
{ status: 'PASS',
date_created: 'Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)'
},
{ status: 'FAIL',
date_created: 'Thu Sep 02 2015 17:24:45 GMT-0700 (PDT)',
},
{ status: '',
date_created: 'Thu Sep 01 2015 17:24:45 GMT-0700 (PDT)',
}
];
var x;
var arr = _.filter(apps, function(data) {
return !!data.status.length;
});
x = _.chain( arr.length ? arr : apps )
.sortBy(function(data) {
return new Date(data.date_created).getTime();
}).last().value();
console.log( x );
要在未提供状态时检查其是否工作:
我希望这有帮助。LMK,如果需要进一步澄清
编辑:更新以获取最新元素(最后一个)。如果我正确理解您的问题,以下是您要查找的内容 您需要过滤元素,以确保它们具有任何类型的状态。然后按日期排序,最早的先排序。然后得到第一个值。在我的示例中,我假设了字符串所在的日期,但仍然可以使用
var apps = [
{ status: 'PASS',
date_created: 'Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)'
},
{ status: 'FAIL',
date_created: 'Thu Sep 02 2015 17:24:45 GMT-0700 (PDT)',
},
{ status: '',
date_created: 'Thu Sep 01 2015 17:24:45 GMT-0700 (PDT)',
}
];
var x;
var arr = _.filter(apps, function(data) {
return !!data.status.length;
});
x = _.chain( arr.length ? arr : apps )
.sortBy(function(data) {
return new Date(data.date_created).getTime();
}).last().value();
console.log( x );
要在未提供状态时检查其是否工作:
我希望这有帮助。LMK,如果需要进一步澄清
编辑:更新以获取最新元素(最后一个)。这里有一个简单的解决方案,只需在
应用程序中迭代一次,无需过滤步骤
其概念是,如果status
为falsy,则其日期将转换为负数,在所有falsy元素中保留正确的排序顺序,但使所有falsy元素的排序顺序低于所有非falsy元素
我们通过减去8640000000000001(即(,加1)来转换falsy元素日期
这是一个简单的解决方案,只需在应用程序中迭代一次,无需过滤步骤
其概念是,如果status
为falsy,则其日期将转换为负数,在所有falsy元素中保留正确的排序顺序,但使所有falsy元素的排序顺序低于所有非falsy元素
我们通过减去8640000000000001(即(,加1)来转换falsy元素日期
这是一个简单的解决方案,只需在应用程序中迭代一次,无需过滤步骤
其概念是,如果status
为falsy,则其日期将转换为负数,在所有falsy元素中保留正确的排序顺序,但使所有falsy元素的排序顺序低于所有非falsy元素
我们通过减去8640000000000001(即(,加1)来转换falsy元素日期
这是一个简单的解决方案,只需在应用程序中迭代一次,无需过滤步骤
其概念是,如果status
为falsy,则其日期将转换为负数,在所有falsy元素中保留正确的排序顺序,但使所有falsy元素的排序顺序低于所有非falsy元素
我们通过减去8640000000000001(即(,加1)来转换falsy元素日期
创建的日期是字符串吗?如果任何对象具有状态,则没有称为“排序依据”的函数,请您解释清楚?如果状态不是空的,那么示例中的所有数据都具有状态
对不起string@thefourtheye或者我可以将其返回为null而不是空字符串,如果这是easierIsdate\u created
字符串?如果任何对象具有状态,则没有称为“排序依据”的函数,请您解释清楚?如果状态不是空的,那么示例中的所有数据都具有状态
对不起string@thefourtheye或者我可以将其返回为null而不是空字符串,如果这是easierIsdate\u created
字符串?如果任何对象具有状态,则没有称为“排序依据”的函数,请您解释清楚?如果状态不是空的,那么示例中的所有数据都具有状态
对不起string@thefourtheye或者我可以将其返回为null而不是空字符串,如果这是easierIsdate\u created
字符串?如果任何对象具有状态,则没有称为“排序依据”的函数,请您解释清楚?如果状态不是空的,那么示例中的所有数据都具有状态
对不起string@thefourtheye或者我可以将其返回为null,而不是空字符串,如果这更容易的话。显然,我只读了你问题的一部分,对不起!正在处理这两种情况。已修复处理这两种情况。非常接近!它无法按日期对多个状态进行排序@user2954587I只是又做了一次更新,现在使用了last
。我认为它应该为你做这件事。请在我回家前确认:)确认!谢谢你,我在拔头发。回家:)显然我只读了你问题的一部分,对不起!