如何筛选对象内的数组并返回元素数量最多的数组(适配随机键名场景)
解决代码
直接替换你现有逻辑即可,适配单个数组、多个数组的所有场景,不需要依赖数组在对象中的排序,也不受随机键名影响:
// 工具方法:传入值为数组的对象,返回长度最长的数组对应的[键, 值]对 function getLongestRankArray(obj) { return Object.entries(obj).reduce((prev, curr) => { return curr[1].length > prev[1].length ? curr : prev }) } function correctBsrObjectKey() { const salesRanks = asinData.products[0].salesRanks const [bsrKey, bsrHistory] = getLongestRankArray(salesRanks) product.bsrObjectKey = bsrKey product.bsrHistory = bsrHistory product.currentBsr = bsrHistory[bsrHistory.length - 1] } correctBsrObjectKey()
逻辑说明
- 用
Object.entries遍历目标对象的所有键值对,通过reduce对比每一项数组的长度,直接返回最长的数组和对应键 - 无论对象内包含1个、2个还是更多个数组,都可以正确识别最长数组,避免原逻辑硬编码索引1导致单数组场景下取到undefined的问题
- 如果有多个数组长度相同,会取顺序靠前的数组,和你原逻辑的兜底行为一致
内容的提问来源于stack exchange,提问作者Timmy
相关产品推荐
相关产品推荐

