Mar*_*ers 23 javascript arrays loops sequence
我试图找到一种简单的方法来循环(迭代)数组以找到序列中所有缺少的数字,该数组看起来有点像下面的那个.
var numArray = [0189459, 0189460, 0189461, 0189463, 0189465];
对于上面的数组我需要0189462并0189464注销.
更新:这是我从Soufiane的回答中使用的确切解决方案.
var numArray = [0189459, 0189460, 0189461, 0189463, 0189465];
var mia= [];
for(var i = 1; i < numArray.length; i++)
{
if(numArray[i] - numArray[i-1] != 1)
{
var x = numArray[i] - numArray[i-1];
var j = 1;
while (j<x)
{
mia.push(numArray[i-1]+j);
j++;
}
}
}
alert(mia) // returns [0189462, 0189464]
Run Code Online (Sandbox Code Playgroud)
UPDATE
这是使用.reduce的整洁版本
var numArray = [0189459, 0189460, 0189461, 0189463, 0189466];
var mia = numArray.reduce(function(acc, cur, ind, arr) {
var diff = cur - arr[ind-1];
if (diff > 1) {
var i = 1;
while (i < diff) {
acc.push(arr[ind-1]+i);
i++;
}
}
return acc;
}, []);
console.log(mia);Run Code Online (Sandbox Code Playgroud)
Sou*_*sou 30
如果您知道这些数字已经排序并且正在增加:
for(var i = 1; i < numArray.length; i++) {
if(numArray[i] - numArray[i-1] != 1) {
//Not consecutive sequence, here you can break or do whatever you want
}
}
Run Code Online (Sandbox Code Playgroud)
小智 15
ES6 风格
var arr = [0189459, 0189460, 0189461, 0189463, 0189465];
var [min,max] = [Math.min(...arr), Math.max(...arr)];
var out = Array.from(Array(max-min),(v,i)=>i+min).filter(i=>!arr.includes(i));
Run Code Online (Sandbox Code Playgroud)
结果:[189462, 189464]
观察你的前导零,当阵列被解释时它们将被丢弃 -
var A = [0189459,0189460,0189461,0189463,0189465]
(A返回[189459,189460,189461,189463,189465])
function absent(arr){
var mia= [], min= Math.min.apply('',arr), max= Math.max.apply('',arr);
while(min<max){
if(arr.indexOf(++min)== -1) mia.push(min);
}
return mia;
}
Run Code Online (Sandbox Code Playgroud)
var A = [0189459,0189460,0189461,0189463,0189465]; 警报(无(A))
/*返回值:(数组)189462,189464*/
要在序列中找到缺失的数字,首先,我们需要对数组进行排序。然后我们可以确定缺少哪个数字。我在这里提供了一些测试场景的完整代码。此代码将仅识别丢失的正数,如果您传递负值,即使它给出正数。
function findMissingNumber(inputAr) {
// Sort array
sortArray(inputAr);
// finding missing number here
var result = 0;
if (inputAr[0] > 1 || inputAr[inputAr.length - 1] < 1) {
result = 1;
} else {
for (var i = 0; i < inputAr.length; i++) {
if ((inputAr[i + 1] - inputAr[i]) > 1) {
result = inputAr[i] + 1;
}
}
}
if (!result) {
result = inputAr[inputAr.length - 1] + 1;
}
return result;
}
function sortArray(inputAr) {
var temp;
for (var i = 0; i < inputAr.length; i++) {
for (var j = i + 1; j < inputAr.length; j++) {
if (inputAr[j] < inputAr[i]) {
temp = inputAr[j];
inputAr[j] = inputAr[i];
inputAr[i] = temp;
}
}
}
}
console.log(findMissingNumber([1, 3, 6, 4, 1, 2]));
console.log(findMissingNumber([1, 2, 3]));
console.log(findMissingNumber([85]));
console.log(findMissingNumber([86, 85]));
console.log(findMissingNumber([0, 1000]));Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29152 次 |
| 最近记录: |