将字符串数组减少到最小的可执行值

时间:2016-12-28 18:01:25

标签: javascript arrays node.js string

我正在处理一个节点模块,该模块将文件上传到s3并在上传文件后执行云端无效,但考虑到无效,我想要减少无效文件路径上传到可能的最小可执行值,例如

[
  'library-latest-v2.min.js',
  'library-latest-v2.min.js.map',
  'library-latest-v2.test.min.js',
  'library-latest-v2.test.min.js.map'
]

将成为library-latest-v2*

任何想法如何编写函数来执行此操作?没有太多的运气谷歌搜索。奖励积分,如果它可以处理多种变化,例如

[
  'library-latest-v2.min.js',
  'library-latest-v2.min.js.map',
  'other-library-v3.min.js',
  'other-library-v3.min.js.map'
]

会减少到['library-latest-v2*', 'other-library-v3*'],但不确定可能会有多少

2 个答案:

答案 0 :(得分:1)

假设您的Array元素采用给定格式。

尝试这样的事情。

var arr = [
  'library-latest-v2.min.js',
  'library-latest-v2.min.js.map',
  'other-library-v3.min.js',
  'other-library-v3.min.js.map'
];

var reducedArr = [];
var temp;
arr.forEach(function(item){
   temp = item.split('.')[0] + "*";
   if(reducedArr.indexOf(temp) < 0) reducedArr.push(temp);
});

console.log(reducedArr);

另一个没有任何进一步变量的解决方案

var arr = [
  'library-latest-v2.min.js',
  'library-latest-v2.min.js.map',
  'other-library-v3.min.js',
  'other-library-v3.min.js.map'
].map(function(item){
  return item.split('.')[0] + "*";
}).filter(function(item, index, self){
  return self.indexOf(item) === index;
});

console.log(arr);

答案 1 :(得分:1)

你走了:

let a = [
    'library-latest-v2.min.js',
    'library-latest-v2.min.js.map',
    'other-library-v3.min.js',
    'other-library-v3.min.js.map'
];


let b = [];

for (let i of a) {
    let m = i.match(/[^.]*/).pop() + '*';

    if (b.indexOf(m) === -1) {
        b.push(m);
     }
}