Javascipt 替换数组中的精确数字

问题描述

我正在尝试替换数组中的数字,但面临一个问题,该问题无法正确管理如何正确定位我真正需要更改的数据。 我会举一个例子来更准确地描述它。 想象一下我的数据数组是这样的:

[“数据”、“电话号码”、“地址”]

我可以通过以下脚本更改数字,但我的第一个问题是它在列中找到的数字之间没有区别,例如“地址”中的“电话号码”(目前没有使用它,但我应该在地址中包含邮政编码,这真的是一个问题)

此外,我的脚本的第二个也是当前的问题是,显然在相同的“电话号码”中,一个号码可能会出现更多次,而我只想影响数据的第一个块 - 假设添加/删除国家代码(或什至用它的国家 vexillum 替换它),我通常喜欢“+1 0000000000”或“+54 0000000000” 因此,例如,如果一个数字位于欧盟,它确实使该脚本无用:西班牙使用“+34”而法国使用“+33”,无论如何它都不会成功,因为它只识别两者的“+3”。

我发现其他人已经面临这个问题,这似乎解决了它将值包装在一个 buondaries 中的问题 - 例如像 "\b"constant"\b" 这样的 - 但要么是错误的语法要么它不是真的适用于我的情况。其他人建议使用 forEach 或 Array.prototype.every ,我无法理解如何在这种情况下应用。 如果您对此有其他想法,可以尝试一下!

function phoneUPDATES(val)
                            {
                                                    
var i= 0; 
var array3 = val.value.split("\n"); 
for ( i = 0; i < array3.length; ++i) { 
                                        array3[i] = "+" + array3[i]; 
                                                                        } 

var arrayLInes = array3.join("\n"); 
const zero = "0";
const replaceZERO = "0";
const one = "1";
const replaceONE = "1";


const result0 = arrayLInes.replaceAll(zero,replaceZERO);
const result1 = result0.replaceAll(one,replaceONE);
const result2 = result1.replaceAll(two,replaceTWO);
const result3 = result2.replaceAll(thre,replaceTHREE);
const result4 = result3.replaceAll(four,replaceFOUR);
const result5 = result4.replaceAll(five,replaceFIVE);
const result6 = result5.replaceAll(six,replaceSIX);
const result7 = result6.replaceAll(seven,replaceSEVEN);
const result8 = result7.replaceAll(eight,replaceEIGHT);
const result9 = result8.replaceAll(nine,replaceNINE);
const result10 = result9.replaceAll(ten,replaceTEN);
const result11 = result10.replaceAll(eleven,replaceELEVEN);

解决方法

为什么不使用正则表达式替换,您可以执行类似 /(\+\d+ )/g 的操作,它会找到一个 + 后跟一个或多个数字后跟一个空格,然后您可以删除匹配项:

const phoneNumbers = [,"+54 9876543210"]

console.log(phoneNumbers.map((num) => num.replaceAll(/(\+\d+ )/g,'')))

如果你只需要定位数组中的第二个元素,我想你的数据看起来像

const data = [["data","+1 1234567890,+1 5555555555","address"],["data","+11 111111111,+23 23232323","address"]];
 console.log(data.map((el) => {
     el[1] = el[1].replaceAll(/(\+\d+ )/g,'');
     return el;
 }))

,

好吧,这几乎是作弊,但我之前真的没有想到,顺便说一下,甚至没有真正解决问题,但似乎可以解决这个问题。 如果我按降序调用replacemente,则该问题不会出现,因为涉及较大数字的替换条件在较小数字之前匹配。

但是如果有人建议一个完整的“真正的代码符合”解决方案是好的