Javascript 根据现有对象数组中的条件获取包含唯一值的对象数组

Javascript 根据现有对象数组中的条件获取包含唯一值的对象数组,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个包含我的产品信息的对象数组,如下所示: 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:

我有一个包含我的产品信息的对象数组,如下所示:

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

由于我不想解析数组中的每一项(使用for循环),是否有任何直接数组功能可以实现这一结果?

没有自动方式来完成您想要的操作。这几乎需要蛮力循环和比较。可能有一些库可以提供帮助,您可以使用内置循环,但在任何浏览器中都可以使用的普通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]);
}
var products=[{ProductID:1,“产品名称”:“玩具车”,价格:250},
{ProductID:2,“产品名称”:“三轮车”,价格:1250},
{ProductID:1,“产品名称”:“玩具车”,价格:450},
{ProductID:3,“产品名称”:“喂食椅”,价格:1700},
{ProductID:3,“产品名称”:“喂食椅”,价格:2200},
{ProductID:1,“产品名称”:“玩具车”,价格:500},
{ProductID:2,“产品名称”:“三轮车”,价格:1020},
{ProductID:4,“产品名称”:“婴儿秋千”,价格:430},
{ProductID:4,“产品名称”:“婴儿秋千”,价格:550}]
//收集所有独特的产品和最低的价格
var lowestProduct={};
对于(变量i=0;i
工作演示:

仅供参考,我必须将您的产品数据结构修改为合法JS,方法是在
“Product Name”
周围加上引号,并将
“TriCycle”
的两个实例修改为使用相同的大小写。

您可以使用库-它提供了大量有用的函数来处理集合(数组)。使用此库,您的解决方案将如下所示:

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