javascript - 如何根据javascript中的最大值从对象数组中删除一个对象

标签 javascript lodash

我有一个看起来像这样的对象数组:

[ { person: 'Fred', scoreTotal: 29 },
{ person: 'Alice', scoreTotal: 34 },
{ person: 'Alice', scoreTotal: 22 },
{ person: 'Mary', scoreTotal: 14 },
{ person: 'Bob', scoreTotal: 33 },
{ person: 'Bob', scoreTotal: 13 },
{ person: 'Bob', scoreTotal: 22 },
{ person: 'Joe', scoreTotal: 28 }]

并且对于给定的人有多个对象 -> 我想保留顶部的“X”。例如:

一个。一个人的前 1 个结果 结果看起来像这样:

    [ { person: 'Fred', scoreTotal: 29 },
    { person: 'Alice', scoreTotal: 34 },
    { person: 'Mary', scoreTotal: 14 },
    { person: 'Bob', scoreTotal: 33 },
    { person: 'Joe', scoreTotal: 28 }]

一个人的前 2 个结果 结果看起来像这样:

   [ { person: 'Fred', scoreTotal: 29 },
  { person: 'Alice', scoreTotal: 34 },
   { person: 'Alice', scoreTotal: 22 },
   { person: 'Mary', scoreTotal: 14 },
   { person: 'Bob', scoreTotal: 33 },
   { person: 'Bob', scoreTotal: 22 },
   { person: 'Joe', scoreTotal: 28 }]

有没有办法使用像 Lodash 这样的东西来实现这一点?

我认为我正朝着正确的方向前进,但还不完全正确:

for (var i = 0; i < t.length - 1; i++) {
if (
  t[i].golfer === t[i + 1].golfer &&
  t[i].scoreTotal < t[i + 1].scoreTotal
) {
  delete t[i];
}

//删除“未定义条目”

t = t.filter(function(el) {
    return typeof el !== "undefined";
});
console.log(t);

最佳答案

无需 Underscore/Lodash,您也可以非常简单地完成此操作。按分数从高到低对数组进行排序。然后使用 Array.filter .当过滤器遍历数组时,跟踪您看到每个人的次数,并在达到您想要的人的最高次数后开始返回 false。

let arr = [ { person: 'Fred', scoreTotal: 29 },{ person: 'Alice', scoreTotal: 34 },{ person: 'Alice', scoreTotal: 22 },{ person: 'Mary', scoreTotal: 14 },{ person: 'Bob', scoreTotal: 33 },{ person: 'Bob', scoreTotal: 13 },{ person: 'Bob', scoreTotal: 22 },{ person: 'Joe', scoreTotal: 28 }]

function filterTop(arr, top) {
    let counts = {}
    return [...arr].sort((a, b) => b.scoreTotal - a.scoreTotal)
    .filter(score => (counts[score.person] = (counts[score.person] || 0) +1 ) <= top)
}


console.log(filterTop(arr, 1))
console.log(filterTop(arr, 2))

关于javascript - 如何根据javascript中的最大值从对象数组中删除一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51256612/

相关文章:

javascript - 正则表达式在单词之间只允许一个空格

javascript - Lodash重新分配对象数组以构建树

javascript - 使用 Lodash 计算字符串在数组中重复的次数

javascript - 如何将对象列表减少为重复项

javascript - 深度过滤对象 Javascript 数组

javascript - 在 js.erb 文件中输出 ruby​​ 字符串

javascript - 更改节点类型

javascript - 非 Javascript 国家/地区选择

javascript - 如何使用 lodash 用 1 个 throttle 来控制多个按钮?

javascript - JQuery.getJSON() 读取本地文件