我正在一个节点模块上,该模块将文件上传到s3并在上传文件后执行cloudfront失效,但是考虑到失效不是免费的,我想将上传的失效文件路径减少到最小的可修正值,例如

[
  '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*'],但不确定那将是多么可能

最佳答案

假设您的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);

07-24 16:39