【发布时间】:2016-09-28 01:43:46
【问题描述】:
我在 NodeJS 中有这个功能,我过滤元素:
// Remove duplicates and expired
var data = (result[0].concat(result[1]).concat(result[3])).filter((event, index, self) => self.findIndex((t) => {
var eventDate = new Date(event.start_time);
return t.id === event.id && todayDate.setHours(0,0,0,0) <= eventDate.setHours(0,0,0,0);
}) === index)
// Remove invalid
.filter(function(event){
if(~this.indexOf(event.id)){
return false;
} else {
return true;
}
}, result[2])
// Sort array by date
.sort(function(a,b) {
return new Date(a.start_time).getTime() - new Date(b.start_time).getTime();
})
// Filter promoted
// PROBLEM
.filter(function(event){
if(~this.indexOf(event.id)){
event.promoted = true;
console.log(filtered.indexOf(event));
// MOVE THIS TO TOP
}
return true;
}, result[4]);
现在,在最后一个过滤方法中,我从 lis(result [4]) 中找到具有 ID 的元素,并向它们添加属性“promoted”。
我还想立即将所有提升的事件移动到数组的顶部,因为我将它们的索引放在数组中,而不是触发另一个循环来完成这项工作。
我该怎么做?因为对我使用拼接不起作用
还有关于这个功能质量的建议吗?
谢谢:)
【问题讨论】:
-
您能否展示一个简单的数据集,其中包含您的
filter.sort.filter序列以及预期的输出? -
如果要可靠地工作,您的排序函数应该返回
-1、0和1 -
.sort确实改变了输入数组,所以你知道
标签: javascript arrays node.js sorting ecmascript-6