Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 179x 21347x 8x 21339x 21339x 21339x 21339x 16745x 4594x 4591x 21339x | // compareValues comes from this article // https://www.sitepoint.com/sort-an-array-of-objects-in-javascript/ // It is used to sort arrays of objects, like this: // For // const singers = [ // { name: 'Steven Tyler', band: 'Aerosmith', born: 1948 }, // { name: 'Karen Carpenter', band: 'The Carpenters', born: 1950 }, // { name: 'Kurt Cobain', band: 'Nirvana', born: 1967 }, // { name: 'Stevie Nicks', band: 'Fleetwood Mac', born: 1948 }, // ]; // // Use: // // array is sorted by band, in ascending order by default // singers.sort(compareValues('band')); // // array is sorted by band in descending order // singers.sort(compareValues('band', 'desc')); // // array is sorted by name in ascending order // singers.sort(compareValues('name')); // // array is sorted by date if birth in descending order // singers.sort(compareValues('born', 'desc')); // Stryker disable next-line StringLiteral: The "" mutant results in equivalent mutant due to it defaulting to ascending sort if order is not "desc" export function compareValues(key, order = 'asc') { return function innerSort(a, b) { // Logical Operator: Requiring only one object to have the property causes comparisons to undefined to be equivalent (> or < to undefined evaluates to false which will return 0) // Conditional Expression: Changing to false could have both properties be undefined but < > comparisons to undefeind are equivalent to false, returning 0 anyway // BlockStatement: Removing "Return 0" reults in equivalent mutant since one or both elements will be undefined and < > comparisons will evaluate to false // Stryker disable next-line LogicalOperator, ConditionalExpression, BlockStatement: Each mutant results in equivalent code (reasons in above code comment) if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) { // property doesn't exist on either object return 0; } const varA = (typeof a[key] === 'string') ? a[key].toUpperCase() : a[key]; const varB = (typeof b[key] === 'string') ? b[key].toUpperCase() : b[key]; let comparison = 0; // Stryker disable next-line EqualityOperator: the >= mutant results in an equivalent mutant (if two elems are equal switching them is the same) if (varA > varB) { comparison = 1; } else if (varA < varB) { comparison = -1; } return ( // Stryker disable next-line ArithmeticOperator: The / mutant results in an equivalent mutant (order === 'desc') ? (comparison * -1) : comparison ); }; } |