javascript - 将元素数组位置更改为顶部

标签 javascript arrays node.js sorting ecmascript-6

我在 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”。

我还想将所有提升的事件立即移至数组顶部,因为我在数组中拥有它们的索引,而不是为此作业触发另一个循环。

我该怎么做?因为对我来说使用 splice 不起作用

对此功能的质量还有什么建议吗?

谢谢:)

最佳答案

您不应使用filter 来更改数组的元素。有map可以做到这一点。

如果您想根据多个属性对元素进行排序,您可以这样做。

//clean
const invalid = result[2],
    promoted = result[4];

var data = result[0]
   .concat(result[1], result[3])
   .filter(dedup) //remove duplicated
   //set promoted flag
   .map(event => {
       event.promoted = promoted.indexOf(event.id) > -1
       return event
   })
   //sort by promoted then by start_time  
   .sort((a, b) => (b.promoted - a.promoted) || (a.start_time - b.start_time))

关于javascript - 将元素数组位置更改为顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37522082/

相关文章:

javascript - Promise.resolve(promise) 的用例是什么?

c++ - 使用 memset 初始化整个数组

c - 使用指针对 C 中的结构数组进行排序

javascript - Moment.js 从 MySQL 日期时间返回错误值

javascript - Jquery:无法设置表 td 的输入值

java - GWT 日期格式

javascript - 在 Vue 模板中按类别组循环遍历产品项

javascript - Node.js React : Can't add property context, 对象不可扩展

mysql - Sequelize.js:包括意外。元素必须是模型、关联或对象

javascript - 从数组中删除空字符串或空白字符串 - Javascript