首页 > 解决方案 > 使用正则表达式的 Javascript 数组排序

问题描述

我想对一组电话号码进行排序,并根据区号输出数组的长度。例如:

var nums = [
    8881756223,
    8881742341,
    9187221757,
    ...,
]

还有比这更多的条目(大约 1300 个),并且已经按数字顺序排列。但是,我想要它做的是:

  1. look at the first 3 numbers of the first entry
  2. look at the next entries first 3 numbers
  3. if they are different, then splice the array, console.log new array.length 
  and console.log that area code

例如,我提供的数组中的前两个数字将被拼接到他们的新数组中,控制台输出将是:

areacode: 888, length: 1
areacode: 918, length: 0

我知道正则表达式来搜索第一个数字,但我不完全知道如何将它们拼接到自己的数组中......就像我知道的那样,使用拼接,但是将两者与逻辑语句进行比较,我从来没有在使用正则表达式之前做类似的事情。

我到目前为止是这样的:

const patt = new RegExp('^\d{3}')

var newArr = nums.filter(x => patt)

for (var i = 0; i < newArr.length; i++)
    console.log(newArr[i])

但这是吐出完整的数字,而不是区号本身。当然,在我得到它只是吐出区号之后,我会添加逻辑进行排序。

标签: javascriptarraysregexsorting

解决方案


我建议使用

nums.map(x => ("" + x).replace(/^(\d{3})[^]*/, '$1'))

这里,

  • "" + x将强制数字字符串
  • .replace(/^(\d{3})[^]*/, '$1')将删除保留前 3 位数字的所有字符(或不匹配时的整个字符串)。

JS 演示:

var nums = [
    8881756223,
    8881742341,
    9187221757,
    1
];
var res = nums.map(x => ("" + x).replace(/^(\d{3})[^]*/, '$1'));
console.log(res);


推荐阅读