首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript -基于前缀重新构造字符串数组

Javascript -基于前缀重新构造字符串数组
EN

Stack Overflow用户
提问于 2016-01-20 09:12:55
回答 5查看 1.4K关注 0票数 0

我有一个数组,其中包含一个文件名列表:

代码语言:javascript
复制
var files = ['home_01.ai','home_02.ai','home_03.ai','imprint_01.ai','imprint_02.ai']

我想要做的是将这个数组重新组织成一个多维数组,它用相同的前缀将每个文件组合在一起。在这种情况下:

代码语言:javascript
复制
var firstArray = ['home_01.ai','home_02.ai','home_03.ai'], /*home*/
    secondArray = ['imprint_01.ai','imprint_02.ai']; /*imprint*/

如果我的文件数组中有一个可变数量的前缀,可以是任意长度,我如何做到这一点?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-01-20 09:37:38

您可以在数组上循环并拆分'_‘上的文件名以获得优先级,然后将这些文件名添加到由前缀索引的正确数组中。

代码语言:javascript
复制
var files = ['home_01.ai', 'home_02.ai', 'home_03.ai', 'imprint_01.ai', 'imprint_02.ai'];
var result = {};

for (var i = 0; i < files.length; i++) {
  if (files[i].indexOf('_') < 0) 
  {
    console.log("No prefix detected in '" + files[i] + "'.");
    continue;
  }
  var prefix = files[i].split('_')[0];
  if (!result[prefix])
    result[prefix] = [];
  result[prefix].push(files[i]);
}

console.log(result);

票数 1
EN

Stack Overflow用户

发布于 2016-01-20 09:34:45

更新

我没注意到你可能还有别的前缀。用于任何前缀的更新。

代码语言:javascript
复制
function splitFilesIntoTypes(_files, cb) {
  var result = [];
  // loop through the array
  _files.map(function(a, b){
      if(!result[a.split('_')[0]])
        result[a.split('_')[0]] = [];
    
      result[a.split('_')[0]].push(a);
  });
  return result
}

var files = ['another_01.ai','home_01.ai','home_02.ai','home_03.ai','imprint_01.ai','imprint_02.ai'];
console.log(splitFilesIntoTypes(files));

固定

假设你只有两种类型的名字(home_.和imprint_)。我把这个函数分成两个数组。

代码语言:javascript
复制
// function takes array and returns two array to callback function
function splitFilesIntoTypes(_files, cb) {
  // if you have only two types of names
  var _home = [], _imprint = [];

  // loop through the array
  _files.map(function(a, b){
      
      if(a.split('_')[0] === 'home') _home.push(a);
      if(a.split('_')[0] === 'imprint') _imprint.push(a);
  });
  
  if(typeof cb === "function")
    cb(_home, _imprint);
  

}

var files = ['home_01.ai','home_02.ai','home_03.ai','imprint_01.ai','imprint_02.ai'];

splitFilesIntoTypes(files, function(firstArray, secondArray) {

  console.log(firstArray);
  console.log(secondArray);
  
});
票数 0
EN

Stack Overflow用户

发布于 2016-01-20 09:47:00

您可以使用AlaSQL JavaScript数据处理库来完成这一任务。

以下是解决您的问题的方法:

代码语言:javascript
复制
var res = alasql('COLUMN OF SELECT ARRAY(_) FROM ? \
     GROUP BY _->split("_")->0',[files]);

此语句返回按前缀分组的数组:

代码语言:javascript
复制
[ [ 'home_01.ai', 'home_02.ai', 'home_03.ai' ],
  [ 'imprint_01.ai', 'imprint_02.ai' ] ]

在此:

  • -只返回查询的第一列
  • 选择。从哪来的?按.-选择语句分组
  • 数组(_)-数组中的组记录
  • 从?-从参数文件查询
  • 由->split("")->0组成的组-取一个值,用'‘拆分它,然后取数组的第一个元素(类似于JS r.split(’)

免责声明:我是AlaSQL的作者。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34895800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档