javascript - 如何优化检查重复值和缺失值的代码?
问题描述
此代码用于在对它们进行排序后返回重复项,并且还用于返回给定数组的限制之间的缺失值,它已正确执行,但我需要对其重新编码,以便它在比执行时间更短的时间内执行 任何人都可以帮助吗?
function findDupsMiss(arr) {
// your code here
var newarr = [];
var missed;
var duplicates = [];
var newdup = []
arr.forEach((el, i) => {
if (newarr.includes(el) == false) {
newarr.push(el)
}
})
var sortedArr = newarr.sort((a, b) => a - b);
for (var i = 0; i < sortedArr.length - 1; i++) {
if ((sortedArr[i] + 1) !== sortedArr[i + 1]) {
missed = sortedArr[i] + 1
}
}
arr.forEach(el => {
if (arr.indexOf(el) != arr.lastIndexOf(el)) {
duplicates.push(el)
}
})
duplicates.forEach(el => {
if (newdup.includes(el) == false) {
newdup.push(el)
}
})
var lastdup = newdup.sort((a, b) => a - b);
return [missed, lastdup]
}
findDupsMiss([10, 9, 8, 9, 6, 1, 2, 4, 3, 2, 5, 5, 3])
解决方案
您可以使用对象计算值并获取它的所有键并按值过滤。
对于缺少的键,找到没有前一个键的值。
function findDupsMiss(arr) {
let count = {},
duplicates = [],
missing;
for (let value of arr)
if (value in count) count[value]++;
else count[value] = -1;
for (let key in count) {
if (!count[key]) duplicates.push(+key);
if (!(key - 1 in count)) missing = key - 1;
}
return [missing, duplicates];
}
console.log(findDupsMiss([10, 9, 8, 9, 6, 1, 2, 4, 3, 2, 5, 5, 3]));
推荐阅读
- python - 将两个 JSON 文件导入同一集合的两列
- node.js - 我收到请求被服务器拒绝 MapQuest 的错误
- google-apps-script - IMPORTXML - URL 内容的资源超出最大大小
- angular - 禁用
经过一定的计数 - core-data - 带有 SwiftUI 的 CoreData:FetchedResults 未针对动态 FetchRequests 更新
- android - 平台不允许 Flutter Insecure http
- .net - DocuSign REST API .Net framework SDK - 如何正确生成令牌(错误:issuer_not_found)
- elasticsearch - 针对大量数据的弹性搜索性能相关查询
- python - python中的“登录提示”
- node.js - 过滤猫鼬中的集合?