2014-06-06 23 views
0

根據病情唯一值的對象數組:獲取包含從我有包含我的產品的信息對象的數組如下現有對象數組

var products = [{ProductID: 1, Product Name:"Toy Car", Price: 250}, 
     {ProductID: 2, Product Name:"TriCycle", Price: 1250}, 
     {ProductID: 1, Product Name:"Toy Car", Price: 450}, 
     {ProductID: 3, Product Name:"Feeding Chair", Price: 1700}, 
     {ProductID: 3, Product Name:"Feeding Chair", Price: 2200}, 
     {ProductID: 1, Product Name:"Toy Car", Price: 500}, 
     {ProductID: 2, Product Name:"Tricycle", Price: 1020}, 
     {ProductID: 4, Product Name:"Baby swing", Price: 430}, 
     {ProductID: 4, Product Name:"Baby swing", Price: 550}] 

現在我想獲得對象的數組包含具有最低的價格獨特的產品名稱如下

var UniqueProducts = [{ProductID: 1, Product Name:"Toy Car", Price: 250}, 
      {ProductID: 2, Product Name:"TriCycle", Price: 1020}, 
      {ProductID: 3, Product Name:"Feeding Chair", Price: 1700}, 
      {ProductID: 4, Product Name:"Baby swing", Price: 430}] 

有沒有因爲我不想來分析每一個項目在數組中(使用循環),可以實現這個結果的直接陣列功能?

回答

0

有沒有自動的方式來做你想做的。它非常需要強力循環和比較。可能有一些圖書館,在那裏,有一些幫助,你可以使用內置的循環,但在任何瀏覽器的工作原理平原JS並不複雜:

var products = [{ProductID: 1, "Product Name":"Toy Car", Price: 250}, 
     {ProductID: 2, "Product Name":"TriCycle", Price: 1250}, 
     {ProductID: 1, "Product Name":"Toy Car", Price: 450}, 
     {ProductID: 3, "Product Name":"Feeding Chair", Price: 1700}, 
     {ProductID: 3, "Product Name":"Feeding Chair", Price: 2200}, 
     {ProductID: 1, "Product Name":"Toy Car", Price: 500}, 
     {ProductID: 2, "Product Name":"TriCycle", Price: 1020}, 
     {ProductID: 4, "Product Name":"Baby swing", Price: 430}, 
     {ProductID: 4, "Product Name":"Baby swing", Price: 550}] 

// gather all the unique products and lowest price 
var lowestProduct = {}; 
for (var i=0; i < products.length; i++){ 
    var item = products[i]; 
    var name = item["Product Name"]; 
    if (!lowestProduct[name] || item.Price < lowestProduct[name].Price) { 
     lowestProduct[name] = item; 
    } 
} 

// create output data structure 
var uniqueProducts = []; 
for (var product in lowestProduct) { 
    uniqueProducts.push(lowestProduct[product]); 
} 

工作演示:http://jsfiddle.net/jfriend00/Ks58N/

僅供參考,我必須修正您的產品數據結構,使其成爲合法JS,方法是在"Product Name"之間加上引號,並修復"TriCycle"的兩個實例以使用相同的大寫。

0

您可以使用UnderscoreJs庫 - 它提供了很多有用的函數來處理集合(數組)。使用這個庫您的解決方案將是這樣的:

var products = [{ ProductID: 1, ProductName: "Toy Car", Price: 250 }, 
     { ProductID: 2, ProductName: "TriCycle", Price: 1250 }, 
     { ProductID: 1, ProductName: "Toy Car", Price: 450 }, 
     { ProductID: 3, ProductName: "Feeding Chair", Price: 1700 }, 
     { ProductID: 3, ProductName: "Feeding Chair", Price: 2200 }, 
     { ProductID: 1, ProductName: "Toy Car", Price: 500 }, 
     { ProductID: 2, ProductName: "Tricycle", Price: 1020 }, 
     { ProductID: 4, ProductName: "Baby swing", Price: 430 }, 
     { ProductID: 4, ProductName: "Baby swing", Price: 550 }]; 

//group by name 
var groupedProducts = _.groupBy(products, 
    function (product) { 
     return product.ProductName.toLowerCase(); 
    }); 

var result = [], i=0; 

//foreach group find element with min price. 
_.each(groupedProducts,function (group) { 
    result[i] = _.min(group, function (product) { return product.Price; }); 
    i++; 
}); 

console.log(result); 

JsFiddle example

相關問題