2016-03-15 38 views
-2

我有對象的約1500元的JavaScript數組排序由財產的存在,同時保持舊秩序

var a = [ 
    { 
     'name': 'jug', 
     'price': 0, 
    }, 
    { 
     'name': 'watermelon', 
     'price': 47, 
    }, 
    { 
     'name': 'pizza', 
     'price': 0, 
    }, 
    { 
     'name': 'handkerchief', 
     'price': 52, 
    }, 
    .......................... 
] 

我不斷更新與價格的陣列,因爲我得到的數據陣列。

我需要重新排序價格的元素,並保持在同一順序上的那些元素。

如果不那麼清楚可以說,你有一個網頁的產品在一定的順序,價格加載批量產品。 我想把價格放在最前面,並按順序保留,以便產品不會跳來跳去。然而,當我得到價格後,我想將其推到名單上的最後一個價格後的底部。

+1

你如何定義「在上面」? 「第一個X項目不能排序」?那麼X有多大?如果這就是你想要的:切片數組,保持第一部分未排序,排序後一部分,重新​​組合。 – deceze

+3

請顯示你的嘗試。這不是一個代碼寫入服務。還不清楚預期結果是多少 – charlietfl

+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; 
}); 

這將確保,如果價格是不可用,他們將留在底部。

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. 
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]; 
} 

但是,是它會絕對有幫助,如果你更清楚地陳述你想要做什麼...