我有一个数组,其中包含一个文件名列表:
var files = ['home_01.ai','home_02.ai','home_03.ai','imprint_01.ai','imprint_02.ai']我想要做的是将这个数组重新组织成一个多维数组,它用相同的前缀将每个文件组合在一起。在这种情况下:
var firstArray = ['home_01.ai','home_02.ai','home_03.ai'], /*home*/
secondArray = ['imprint_01.ai','imprint_02.ai']; /*imprint*/如果我的文件数组中有一个可变数量的前缀,可以是任意长度,我如何做到这一点?
发布于 2016-01-20 09:37:38
您可以在数组上循环并拆分'_‘上的文件名以获得优先级,然后将这些文件名添加到由前缀索引的正确数组中。
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);
发布于 2016-01-20 09:34:45
更新
我没注意到你可能还有别的前缀。用于任何前缀的更新。
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_)。我把这个函数分成两个数组。
// 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);
});发布于 2016-01-20 09:47:00
您可以使用AlaSQL JavaScript数据处理库来完成这一任务。
以下是解决您的问题的方法:
var res = alasql('COLUMN OF SELECT ARRAY(_) FROM ? \
GROUP BY _->split("_")->0',[files]);此语句返回按前缀分组的数组:
[ [ 'home_01.ai', 'home_02.ai', 'home_03.ai' ],
[ 'imprint_01.ai', 'imprint_02.ai' ] ]在此:
免责声明:我是AlaSQL的作者。
https://stackoverflow.com/questions/34895800
复制相似问题