Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript find";最新的;字符串的版本_Javascript_String - Fatal编程技术网

JavaScript find";最新的;字符串的版本

JavaScript find";最新的;字符串的版本,javascript,string,Javascript,String,这可能很简单,但我想不出任何好的解决方案: 我有一个字符串数组: let array = ['House1', 'House2', 'House3', 'Block1', 'Block2', 'BlockSpecial1']; 随着时间的推移,该数组将发生变化,但在任何时候,我都希望能够将该数组简化为字符串的“最新”版本(根据结束数字,它们可能在某个时间点变为2位或3位),因此我最终想要的是: ['House3', 'Block2', 'BlockSpecial1'] 数组指向一个对象,字符

这可能很简单,但我想不出任何好的解决方案:

我有一个字符串数组:

let array = ['House1', 'House2', 'House3', 'Block1', 'Block2', 'BlockSpecial1'];
随着时间的推移,该数组将发生变化,但在任何时候,我都希望能够将该数组简化为字符串的“最新”版本(根据结束数字,它们可能在某个时间点变为2位或3位),因此我最终想要的是:

['House3', 'Block2', 'BlockSpecial1']
数组指向一个对象,字符串作为键,版本作为值。要获取字符串和版本,可以使用和。然后使用,并将其合并回字符串:

const数组=['House1','House2','House3','Block1','Block2','BlockSpecial1'];
const result=Object.entries(array.reduce((r,s)=>{
常量[,str,version]=s.match(/([A-Za-z]+)(\d+/);
r[str]=(r[str]| | 0)>版本?r[str]:version;//或r[str]=version,前提是版本的顺序始终正确
返回r;
},Object.create(null)))
.map([k,v])=>k+v);

控制台日志(结果)
通过创建
映射
,实际上可以非常干净地完成此操作

const数组=['House1','House2','House3','Block1','Block2','BlockSpecial1'];
常数re=/^([^]+?)(\d+)$/;
const result=[…新映射(array.Map(s=>re.exec.slice(1))]
.map(a=>a.join(“”);
控制台日志(结果)
让tmp,name;
让数组=['House1','House2','House3','Block1','Block2','BlockSpecial1'];
让latest=array.sort((a,b)=>b.match(/\d+$/)[0]-a.match(/\d+$/)[0]).sort().reverse()
.reduce((newArr,item)=>(name=item.match(/.+[^\d]+/)[0],name!=tmp&&(newArr.push(item),tmp=name),newArr),[]);

console.log(最新)/['House3','BlockSpecial1','Block2']
您提出的问题可以得到回答。考虑一个具有终端号的字符串数组的数据结构是否是您需要的最佳数据结构也是明智的。即使是对象包含字符串和单独数字的对象数组也可能更容易,或者它可能是某种队列结构,具体取决于您的需求。