JavaScript 对数组中的对象进行冒泡排序
javascriptweb development
假设,我们有一个构造函数类,它创建类似这样的 Shoe 对象 −
class Shoe { constructor(name, price, type) { this.name = name; this.price = price; this.type = type; } };
我们使用此类来填充类似这样的对象数组 −
const arr = [ new Shoe('Nike AirMax 90', '120', 'Casual'), new Shoe('Jordan Retro 1', '110', 'Casual'), new Shoe('Jadon Doc Martens', '250', 'Seasonal boots'), new Shoe('Adidas X Ghosted', '110', 'Athletic'), new Shoe('Nike Vapourmax Flyknit', '250', 'Casual'), new Shoe('Aldo Loafers', '130', 'Formal'), new Shoe('Timberlands', '199', 'Seasonal boots'), new Shoe('Converse High Tops', '70', 'Casual'), new Shoe('Converse Low Tops', '80', 'Casual'), new Shoe('Adidas NMDs', '110', 'Athletic'), new Shoe('Heels', '130', 'Formal'), new Shoe('Nike AirForce', '150', 'Casual') ];
我们需要编写一个 JavaScript 函数,利用冒泡排序算法根据对象的价格属性对该对象数组进行排序。
示例
其代码为 −
class Shoe { constructor(name, price, type) { this.name = name; this.price = price; this.type = type; } }; const arr = [ new Shoe('Nike AirMax 90', '120', 'Casual'), new Shoe('Jordan Retro 1', '110', 'Casual'), new Shoe('Jadon Doc Martens', '250', 'Seasonal boots'), new Shoe('Adidas X Ghosted', '110', 'Athletic'), new Shoe('Nike Vapourmax Flyknit', '250', 'Casual'), new Shoe('Aldo Loafers', '130', 'Formal'), new Shoe('Timberlands', '199', 'Seasonal boots'), new Shoe('Converse High Tops', '70', 'Casual'), new Shoe('Converse Low Tops', '80', 'Casual'), new Shoe('Adidas NMDs', '110', 'Athletic'), new Shoe('Heels', '130', 'Formal'), new Shoe('Nike AirForce', '150', 'Casual') ]; const bubbleSort = (arr = []) => { let swapped; do { swapped = false; for (let i = 0; i < arr.length − 1; i++) { if (+arr[i].price > +arr[i + 1].price) { let temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; swapped = true; }; }; }while (swapped); } bubbleSort(arr); console.log(arr);
输出
控制台中的输出将是 −
[ Shoe { name: 'Converse High Tops', price: '70', type: 'Casual' }, Shoe { name: 'Converse Low Tops', price: '80', type: 'Casual' }, Shoe { name: 'Jordan Retro 1', price: '110', type: 'Casual' }, Shoe { name: 'Adidas X Ghosted', price: '110', type: 'Athletic' }, Shoe { name: 'Adidas NMDs', price: '110', type: 'Athletic' }, Shoe { name: 'Nike AirMax 90', price: '120', type: 'Casual' }, Shoe { name: 'Aldo Loafers', price: '130', type: 'Formal' }, Shoe { name: 'Heels', price: '130', type: 'Formal' }, Shoe { name: 'Nike AirForce', price: '150', type: 'Casual' }, Shoe { name: 'Timberlands', price: '199', type: 'Seasonal boots' }, Shoe { name: 'Jadon Doc Martens', price: '250', type: 'Seasonal boots'}, Shoe { name: 'Nike Vapourmax Flyknit', price: '250', type: 'Casual' } ]