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(...);