假设我已经有一个数组,其中包含这些商品,并按价格从低到高排序:
[
{ title: "Article 3", price: 1.49 },
{ title: "Article 1", price: 3.00 },
{ title: "Article 4", price: 5.99 },
{ title: "Article 2", price: 19.99 }
]
基本上我想将另一篇文章按正确的位置(根据价格)插入到数组中。我该如何做呢?
我要插入的新文章可能具有以下属性:
{ title: "Article 5", price: 12.00 }
我希望这篇文章出现在索引3处(在文章4和2之间)。
更新(解决方案)
我使用@klutt的答案创建了一个原型方法,其中包含二分搜索算法:
Array.prototype.pushSorted = function(el, compareFn) {
this.splice((function(arr) {
var m = 0;
var n = arr.length - 1;
while(m <= n) {
var k = (n + m) >> 1;
var cmp = compareFn(el, arr[k]);
if(cmp > 0) m = k + 1;
else if(cmp < 0) n = k - 1;
else return k;
}
return -m - 1;
})(this), 0, el);
return this.length;
};
const sortByPrice = (a, b) => a.price > b.price;
theArray.pushSorted({ title: "Article 5", price: 12.00 }, sortByPrice);