Javascript 在链式函数中,哪一个先执行?

Javascript 在链式函数中,哪一个先执行?,javascript,Javascript,假设我有一个元素数组,我想对它们进行排序和过滤。我可以用两种方法来做: let Result = MyArray.sort((a,b) => { return b.sortingNum - a.sortingNum }).filter((task) => { return !task.isWanted } ); 或 两个问题: 在第一种方法中,哪个先执行?排序或过滤器 关于O符号,什么更好?我是先排序再筛选,还是先筛选再排序。我会选

假设我有一个元素数组,我想对它们进行排序和过滤。我可以用两种方法来做:

let Result = MyArray.sort((a,b) => {
        return b.sortingNum - a.sortingNum
    }).filter((task) => {
        return !task.isWanted
    }
);

两个问题:

  • 在第一种方法中,哪个先执行?
    排序
    过滤器

  • 关于O符号,什么更好?我是先排序再筛选,还是先筛选再排序。我会选择filter,然后再进行排序,因为对于较大的数据,filter需要较少的处理能力。但只要把Q扔到这里,就能学到更多


谢谢

在第一种方法中,排序函数将首先执行,然后过滤

就复杂性而言,第二种方法会更好,因为我们将对长度较短的数组应用排序(过滤后)。而另一方面,过滤器将需要相同的时间复杂度

MyArray.sort(...).filter(...);
相当于

var sorted = MyArray.sort(...);
var filtered = sorted.filter(...);

因此,您可以看到
过滤器将如何对
排序的结果执行
,因此必须首先执行
排序

考虑以下示例,其中每个步骤都要打印:

var MyArray=[
{sortingNum:10,iswant:true},
{sortingNum:12,iswant:true},
{sortingNum:2,iswant:false},
{sortingNum:8,iswant:true},
{sortingNum:11,iswant:false},
{sortingNum:6,iswant:false},
{sortingNum:7,iswant:true}
];
console.log(
MyArray.sort((a,b)=>{
控制台日志(“排序”);
返回b.sortingNum-a.sortingNum
}).filter((任务)=>{
控制台日志(“过滤”);
return!task.iswant
})
);
console.log(
MyArray.filter((任务)=>{
控制台日志(“过滤”);
return!task.iswant
}).排序((a,b)=>{
控制台日志(“排序”);
返回b.sortingNum-a.sortingNum
})

);为什么是否决票?它们总是按照它们出现的顺序执行,但我想你可能会被
排序
“就地”排序所愚弄。函数是按照你调用它们的顺序执行的。@adeneo在我的代码中,我实际上
返回了整个语句,但编辑可能会有所帮助。感谢您指出这一点。对不起,“whilefilter将占用相同的时间”是什么意思?因为这两种情况下都是O(n)。它将迭代所有对象。但是,如果先过滤,排序将使用更少的元素
var sorted = MyArray.sort(...);
var filtered = sorted.filter(...);