javascript - 删除数组中的重复对象,保留具有最大属性值的对象

原文 标签 javascript arrays duplicates

我有一个这样的数组:

const array=[ {id:0, quantity:1}, {id:1, quantity:2}, {id:0, quantity:4} ]

我的目标是这样的:
const array=[ {id:1, quantity:2}, {id:0, quantity:4} ]

对象的顺序无关紧要,只要它可以找到数量较大的'id'

我尝试过 filter + findIndex、map +filter 等,但我一直在犯错误。我需要帮助。

最佳答案

您可以使用哈希表并检查是否具有相同的对象 id在结果集中。如果实际数量较大,则分配实际对象。

var array = [{ id: 0, quantity: 1 }, { id: 1, quantity: 2 }, { id: 0, quantity: 4 }],
    hash = Object.create(null),
    unique = array.reduce(function (r, o) {
        if (!(o.id in hash)) {
            hash[o.id] = r.push(o) - 1;
            return r;
        }
        if (o.quantity > r[hash[o.id]].quantity) {
            r[hash[o.id]] = o;
        }
        return r;
    }, []);
    
console.log(unique);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 删除数组中的重复对象,保留具有最大属性值的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45310384/

相关文章:

python - 如何在python数据表h2oai中删除重复项

c - C数组char-当我尝试写入位置0时,程序将写入位置0和1

php - 名称-值和键-值对均在PHP文件中创建(用于json编码)

c# - 当可能为空字符串值时,将字符串数组值转换为int

javascript - 屏幕太小时用图像替换视频

swift - 根据对象标识删除重复的类实例

c++ - C++感知复制插入到std::map中

javascript - 颜色根据列出的编号变化

javascript - Google Maps Autozoom

javascript - 客户端图像映射示例-不起作用