简体   繁体   中英

Sorting an array with a compare function - javascript

I came across this sorting of an array and I do not understand the compare function at the point where '-1 : 1' is included. Please can some one explain to me what the compare function is doing exactly?

 const rows = [ createECG('ad0917d4-e02d-4c46-a5aa-dd83717684e9', '28/06/2022', 'pending'), createECG('9034124a-2ac8-4d52-8711-ef1351a5c18a', '18/05/2022', 'complete'), createECG('a2a7a1f4-81a0-4b70-b1e2-ee7a384a1f4f', '01/05/2022', 'pending'), createECG('e5427e62-5897-4eee-a6a6-8f9925feef96', '21/04/2022', 'complete') ].sort((a) => (a.status === 'pending' ? -1 : 1)); // The object 'a' has a property called 'status' console.log(rows); function createECG(id, date, status) { return {id, date, status}; }

The comparison function returns -1 if the first argument a as lower than b if its status is pending . This indicates that a is lower than b , so it should be sorted ahead. The intended result is that all the pending elements will be at the front of the result.

But this isn't really valid, because the comparison function is required to be consistent -- if a is lower than b , then b should not also be lower than a . When it's comparing two pending objects, it will return -1 when they're passed in either order. The comparison function should return 0 in this case, but it doesn't.

You need to take the delta of the comparison for a symmetrically sorting.

 function createECG(id, date, status) { return { id, date, status }; } const rows = [ createECG('ad0917d4-e02d-4c46-a5aa-dd83717684e9', '28/06/2022', 'pending'), createECG('9034124a-2ac8-4d52-8711-ef1351a5c18a', '18/05/2022', 'complete'), createECG('a2a7a1f4-81a0-4b70-b1e2-ee7a384a1f4f', '01/05/2022', 'pending'), createECG('e5427e62-5897-4eee-a6a6-8f9925feef96', '21/04/2022', 'complete') ] .sort((a, b) => (b.status === 'pending') - (a.status === 'pending')); console.log(rows);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

排序就像过滤一样,你的代码意味着... 当 a.status === 'pending' 等于 1 时,表示该项目的状态属性设置为待处理,当它等于 -1 时表示状态未设置为待处理,然后因为 1 是正确且优越的,那么具有待处理状态的项目将首先出现

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM