[英]Find 5 largest numbers in array of objects and push it to another array
我有一个对象数组,我想在 object 值中找到五个最大的数字,并将这五个对象推送到新数组,但也将它们从第一个数组中删除。 我试过将 for 循环与 push 和 splice 方法结合使用,但结果有点奇怪。 这是我尝试过的一个例子
const arrOfObjs = [ {number: 1, bla: 'sadsad'}, {number: 2, bla: 'sadsad'}, {number: 3, bla: 'sadsad'}, {number: 9, bla: 'sadsad'}, {number: 4, bla: 'sadsad'}, {number: 10, bla: 'sadsad'}, {number: 5, bla: 'sadsad'}, {number: 6, bla: 'sadsad'}, {number: 7, bla: 'sadsad'}, {number: 8, bla: 'sadsad'}, ] let largestNumbers = []; for(var i=0; i<5; i++) { largestNumbers.push( arrOfObjs.splice( arrOfObjs.indexOf( Math.max.apply( Math,arrOfObjs.map(function(o){ return o.number; }) ) ), 1)[0]) } console.log(largestNumbers)
一切似乎都在起作用,而不是最终结果,应该是
[{
bla: "sadsad",
number: 8
}, {
bla: "sadsad",
number: 7
}, {
bla: "sadsad",
number: 6
}, {
bla: "sadsad",
number: 9
}, {
bla: "sadsad",
number: 10
}]
我不确定为什么不返回数字 9,以及为什么返回数字 5。 我究竟做错了什么? 提前致谢!
错误在indexOf
部分。 你不会找到最大值,因为你的数组有对象(应该比较的是number
属性)。 所以更换
arrOfObjs.indexOf(Math.max ........)
和:
arrOfObjs.findIndex(o => o.number === max)
... 其中max
是Math.max
表达式,您应该单独执行,如下所示:
for(var i=0; i<5; i++) {
let max = Math.max.apply(
Math,
arrOfObjs.map(o => o.number)
);
largestNumbers.push(arrOfObjs.splice(
arrOfObjs.findIndex(o => o.number === max), 1)[0]
);
}
问题是您使用 integer 作为参数对包含对象的数组执行.indexOf
。
试试.findIndex(({number})=>number === Math.max.apply...
const arrOfObjs = [ {number: 1, bla: 'sadsad'}, {number: 2, bla: 'sadsad'}, {number: 3, bla: 'sadsad'}, {number: 9, bla: 'sadsad'}, {number: 4, bla: 'sadsad'}, {number: 10, bla: 'sadsad'}, {number: 5, bla: 'sadsad'}, {number: 6, bla: 'sadsad'}, {number: 7, bla: 'sadsad'}, {number: 8, bla: 'sadsad'}, ] let largestNumbers = []; for (var i = 0; i < 5; i++) { largestNumbers.push( arrOfObjs.splice( arrOfObjs.findIndex(({ number }) => number === Math.max.apply( Math, arrOfObjs.map(function(o) { return o.number; }) ) ), 1)[0]) } console.log(largestNumbers)
我会把它排序然后切片。
const arrOfObjs = [ {number: 1, bla: 'sadsad'}, {number: 2, bla: 'sadsad'}, {number: 3, bla: 'sadsad'}, {number: 9, bla: 'sadsad'}, {number: 4, bla: 'sadsad'}, {number: 10, bla: 'sadsad'}, {number: 5, bla: 'sadsad'}, {number: 6, bla: 'sadsad'}, {number: 7, bla: 'sadsad'}, {number: 8, bla: 'sadsad'}, ] console.log(arrOfObjs.sort((a,b)=> a.number - b.number).slice(-5))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.