JavaScript/Node.js中动态ID的数组条目统计优化实现问询
动态统计ID条目数量并排序的实现方案
没问题,针对你这个动态ID统计的需求,咱们可以用JavaScript的Array.reduce()先完成计数,再转换格式并排序,完全不需要硬编码判断ID,完美适配服务器返回的动态数据场景。
完整实现代码
const array = [ ['2','Yes'], ['2','Yes'], ['2','Yes'], ['3','Yes'], ['3','Yes'], ['4','Yes'] ]; // 1. 统计每个ID的出现次数 const countMap = array.reduce((acc, [id]) => { // 如果当前ID还没统计过,初始化为0再加1,否则直接累加 acc[id] = (acc[id] || 0) + 1; return acc; }, {}); // 2. 转换为你需要的数组对象格式 const formattedResult = Object.entries(countMap).map(([id, count]) => ({ ID: id, Count: count.toString() // 按你的要求转成字符串类型,不需要的话可以直接用count数字 })); // 3. 按Count升序排序(注意要转成数字比较,避免字符串排序的问题) const sortedResult = formattedResult.sort((a, b) => parseInt(a.Count) - parseInt(b.Count)); console.log(sortedResult); // 输出:[{"ID":"4","Count":"1"},{"ID":"3","Count":"2"},{"ID":"2","Count":"3"}]
代码说明
- 统计阶段:
reduce()遍历原数组,用对象的键存储ID,值存储对应计数,不管服务器返回什么新ID,都会自动被统计进去,完全动态。 - 格式转换:
Object.entries()把统计对象转成[ID, Count]的数组,再通过map()转换成你需要的结构。 - 排序阶段:因为
Count是字符串类型,所以用parseInt()转成数字后再比较,确保升序排序的正确性。
这个方案完全摆脱了硬编码的限制,不管服务器返回的ID是多少、有多少种,都能正确统计并输出符合要求的结果。
内容的提问来源于stack exchange,提问作者node_man
相关产品推荐
相关产品推荐

