【问题标题】:Javascipt replacing exact numbers in an arrayJavascript替换数组中的确切数字
【发布时间】:2021-06-04 20:28:23
【问题描述】:

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

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

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

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

我发现其他人已经面临这个问题,这似乎解决了将值包装在一个边界内的问题 - 例如像 "\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);

【问题讨论】:

  • 您想将数字更改为做什么?你能给出示例输入和输出吗?
  • line 1 [name1, +1 800000000, Chicago- Illinois, USA] line 2 [name2, +44 111111, Sheffield - England, UK] line 3 [name3, +81 555555555, Nagoya - Japan ] .... ....

标签: javascript arrays replaceall


【解决方案1】:

为什么不使用正则表达式替换,您可以执行 /(\+\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;
 }))

【讨论】:

  • 你可能认为我在开玩笑,但我的代码技术真的很差,我应该使用经典的 document.getElementById('div1').innerText = result11;我怎么能在那里显示它而不是尝试控制台日志?
  • 还有,如何为所有要替换的数字添加一个新行?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2016-10-18
    • 2010-10-31
    • 2017-03-13
    • 2014-12-31
    • 2014-07-01
    • 2018-11-14
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    相关资源
    最近更新 更多