我有一个包含大约1,500个元素的对象数组
var a = [
{
'name': 'jug',
'price': 0,
},
{
'name': 'watermelon',
'price': 47,
},
{
'name': 'pizza',
'price': 0,
},
{
'name': 'handkerchief',
'price': 52,
},
..........................
]
在我获取数据时,我不断用价格更新数组。
我需要使用价格重新排序元素,并保持以相同顺序排在最前面的元素。
如果不是那么清楚,可以说你有一个按特定顺序生产产品的网页,并且批量加载产品的价格。 我想把价格放在最高位置并按顺序保留,这样产品就不会跳转。然而,当我得到价格时,我想在列表上的最后一个价格之后将其推到底部。
答案 0 :(得分:0)
试
a.sort(function(a,b){
var priceA = a.price? a.price : Number.MAX_SAFE_INTEGER;
var priceB = b.price? b.price : Number.MAX_SAFE_INTEGER;
return a.price-b.price;
});
这将确保如果价格不可用,它们将保持在底部。
答案 1 :(得分:0)
为了使其正常工作,您需要拥有indexOfObj,它是数组中所需对象的索引:
var updatedElement = a.splice(indexOfObj, 1); // Remove the element with the updated price
a.push(updatedElement); // Add the new element to the end of the 'a' array.
答案 2 :(得分:0)
好的,我在这里做了一些假设,因为这个问题说实话并不是很清楚。但我相信你想做这样的事情:
(假设newprices
是一批更新数据)
// if product already in list update price, otherwise insert at bottom
var i, index, newprice;
for(i = 0; i<newprices.length; i++) {
newprice = newprices[i];
index = a.findIndex(function(p) { return p.name === newprice.name; });
if(index > -1) { a[index].price = newprice.price; }
else { a.push[newprice]; }
}
或许你想做这样的事情:
// put items that get updated prices or are new altogether at the end of the list
var i, index, newprice;
for(i = 0; i<newprices.length; i++) {
newprice = newprices[i];
index = a.findIndex(function(p) { return p.name === newprice.name; });
if(index > -1) { a.splice(index, 1); }
a.push[newprice];
}
但是,如果你更明确地说明你想要做什么,那肯定会有所帮助......