解码数组中的数字并与不同的数组进行比较



我有两个数组,一个包含数字,另一个包含编码数字。

我需要将编码的数字与正常数字进行匹配才能找到匹配项。诀窍是我需要对数字进行解码才能找到匹配的数字。

let encoded = ['310254@3543129', '03254@03715P5'];
let numbers = ['3102540003543129', '0325400003715445', ...]

当字符串中有多个特殊字符时,我曾尝试使用带有递归的for循环,但我没有得到正确的结果。

for (let i = 0; i < encrypted.length; i++) {
for (let j = 0; j < numbers.length; j++) {
function removeSpecialChars(referenceNumber) {
if(!/^d*$/.test(referenceNumber)){
for (let x = 0, invalidChar = ''; invalidChar = referenceNumber.charAt(x); x++) {
let newString = '';
// which char is invalid
if (!/^d*$/.test(invalidChar)) {
for(let y = 0; i < numbers[j].split('').length; y++){
if(numbers[j].split('')[x] === numbers[j].split('')[x + y]){
newString += numbers[j].split('')[x];
} else break;
}
return removeSpecialChars(referenceNumber.replace(invalidChar, newString));
}
}
}
return referenceNumber;
} // end function
if (removeSpecialChars(encrypted[i]) === numbers[j]) {
count++;
}
}
}

我不确定我是完全错误地对待这件事,还是只是错过了什么。

这是一把小提琴来复制我的结果。https://jsfiddle.net/6ezuwhdb/1/

这里似乎至少有两条规则在起作用(我还没有详细研究过小提琴,但这里的规则可以很容易地扩展(:

  1. 000@编码,并且
  2. 44P编码

我将首先获得这些规则的完整列表,然后使用正则表达式将特殊字符的所有实例替换为它们的数字等价物。

正则表达式使用g修饰符,以便在字符串中替换编码值的所有实例。

const encoded = ['310254@3543129', '03254@03715P5'];
const decoded = encoded.map(en => {
// replace the special characters using multiple regular expressions
let result = en;
// swap all @'s for 
result = result.replace(/@/g, '000');
// swap all P's for 44
result = result.replace(/P/g, '44');
// add more rules here ...
return result;
});
console.log('Decoded numbers: ', decoded);

然后检查是否可以在解码的数字集中找到正常的数字是相当直接的。

// From previous step ;o)
const decoded = [
"3102540003543129",
"0325400003715445"
];
const numbers = ['3102540003543129', '0325400003715445'];
const matchedNumbers = numbers.filter(number => {
return decoded.indexOf(number) >= 0;
});
console.log(matchedNumbers);

最新更新