RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 696440
Accepted
pepel_xD
pepel_xD
Asked:2020-07-22 22:43:41 +0000 UTC2020-07-22 22:43:41 +0000 UTC 2020-07-22 22:43:41 +0000 UTC

数据排序

  • 772

我有原始数组:

[ 'dev/img/sprites/coctail/coc-1.png',         
  'dev/img/sprites/coctail/coc-2.png',         
  'dev/img/sprites/coctail/coc-3.png',         
  'dev/img/sprites/coctail/coc-4.png',         
  'dev/img/sprites/coctail/coc-5.png',         
  'dev/img/sprites/social/advan-1.png',        
  'dev/img/sprites/social/advan-2.png',        
  'dev/img/sprites/social/advan-3.png',        
  'dev/img/sprites/social/advan-4.png',        
  'dev/img/sprites/testSprite1/s19908f1255e3d10,
  'dev/img/sprites/testSprite1/shutterstock_106,
  'dev/img/sprites/testSprite1/tel.jpg',       
  'dev/img/sprites/testSprite1/unnamed.png' ] 

有必要根据它制作一个对象数组,如下所示:

[ { data:                                                                
     [ 'dev/img/sprites/coctail/coc-1.png',                              
       'dev/img/sprites/coctail/coc-2.png',                              
       'dev/img/sprites/coctail/coc-3.png',                              
       'dev/img/sprites/coctail/coc-4.png',                              
       'dev/img/sprites/coctail/coc-5.png' ],                            
    fileName: 'coctail',                                                 
    destPath: 'app/img/' },                                              
  { data:                                                                
     [ 'dev/img/sprites/social/advan-1.png',                             
       'dev/img/sprites/social/advan-2.png',                             
       'dev/img/sprites/social/advan-3.png',                             
       'dev/img/sprites/social/advan-4.png' ],                           
    fileName: 'social',                                                  
    destPath: 'app/img/' },                                              
  { data:                                                                
     [ 'dev/img/sprites/testSprite1/s19908f1255e3d106eca5d.jpg',         
       'dev/img/sprites/testSprite1/shutterstock_106748483-247x180.jpg', 
       'dev/img/sprites/testSprite1/tel.jpg',                            
       'dev/img/sprites/testSprite1/unnamed.png' ],                      
    fileName: 'testSprite1',                                             
    destPath: 'app/img/' } ]    

原则上,任务已经解决,但我自己并不喜欢我写的代码。结果是很多循环,而且不知何故很麻烦。
任何人都可以看一下并指出可以更紧凑地完成的地方吗?

var fileNames = new Set();
var files = [];
var destination = new Set();
//console.log(matches)
matches.forEach((item, i, arr) => {
  if (item.includes(config.spritesFolder)) {
    var pos = item.indexOf(config.spritesFolder);
    var start = item.indexOf('/', pos) + 1;
    var end = item.indexOf('/', start);
    fileNames.add(item.slice(start, end));
    destination.add(item.slice(0, pos));
  }
});
var i = 0;
fileNames.forEach((item, it, arr) => {
  files[i] = {};
  files[i].data = [];
  files[i].fileName = item;
  for (var j = 0; j < matches.length; j++) {
    if (matches[j].indexOf(item) != -1) {
      files[i].data.push(matches[j]);
    }
  }
  i++;
});
for (var i = 0; i < files.length; i++) {
  files[i].destPath = '';
  destination.forEach((item, it, arr) => {
    if (files[i].data[0].indexOf(item) != -1) {
      files[i].destPath = item.replace(config.path.src.dir, config.path.build.dir);
    }
  });
}
console.dir(files)

javascript
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. LiaVa
    2020-07-23T04:14:02Z2020-07-23T04:14:02Z
        var arr = ['dev/img/sprites/coctail/coc-1.png',
        'dev/img/sprites/coctail/coc-2.png',
        'dev/img/sprites/coctail/coc-3.png',
        'dev/img/sprites/coctail/coc-4.png',
        'dev/img/sprites/coctail/coc-5.png',
        'dev/img/sprites/social/advan-1.png',
        'dev/img/sprites/social/advan-2.png',
        'dev/img/sprites/social/advan-3.png',
        'dev/img/sprites/social/advan-4.png',
        'dev/img/sprites/testSprite1/s19908f1255e3d10',
        'dev/img/sprites/testSprite1/shutterstock_106',
        'dev/img/sprites/testSprite1/tel.jpg',
        'dev/img/sprites/testSprite1/unnamed.png',
        'dev/img/sprites/testSprite2/unnamed.png',
        'dev/img/sprites/testSprite3/unnamed.png'],
    i = newArrLength = 0,
    newArr = [],
    tempArr2 = tempArr = [],
    createData = function (file, path) {
        this.data = tempArr;
        this.filename = file;
        this.path = path;
    };
    while (i < arr.length) {
        var splited1 = arr[i].split('/');
        splited2 = arr[i + 1] ? arr[i + 1].split('/') : false;
        if (splited1[3] === splited2[3]) {
            tempArr[tempArr.length] = arr[i];
        } else {
            tempArr[tempArr.length] = arr[i];
            tempArr2 = new createData(splited1[3], splited1[0] + '/' + splited1[1]);
            newArr[newArr.length] = tempArr2;
            tempArr = tempArr2 = [];
        };
        ++i;
    }
    
    console.log(newArr[0]);
    
    • 0
  2. Best Answer
    pepel_xD
    2020-07-24T18:00:49Z2020-07-24T18:00:49Z

    想了想,我改写了代码如下:

    var matches = ['dev/img/sprites/coctail/coc-1.png',
      'dev/img/sprites/coctail/coc-2.png',
      'dev/img/sprites/coctail/coc-3.png',
      'dev/img/sprites/coctail/coc-4.png',
      'dev/img/sprites/coctail/coc-5.png',
      'dev/img/sprites/social/advan-1.png',
      'dev/img/sprites/social/advan-2.png',
      'dev/img/sprites/social/advan-3.png',
      'dev/img/sprites/social/advan-4.png',
      'dev/img/sprites/testSprite1/s19908f1255e3d106eca5d.jpg',
      'dev/img/sprites/testSprite1/shutterstock_106748483-247x180.jpg',
      'dev/img/sprites/testSprite1/tel.jpg',
      'dev/img/sprites/testSprite1/unnamed.png'
    ]
    
    var files = [];
    
    function createItem(arr, i, prop, item) {
      arr[i] = {};
      arr[i][prop] = [];
      arr[i][prop].push(item)
      if (!arr[i].fileName && !arr[i].destPath) {
        var pos = item.indexOf('sprites');
        var start = item.indexOf('/', pos) + 1;
        var end = item.indexOf('/', start);
        arr[i].fileName = item.slice(start, end);
        arr[i].destPath = item.slice(0, pos).replace('dev', 'app');
      }
    }
    var j = 0;
    matches.forEach((item, i, arr) => {
      var pos = item.lastIndexOf('/');
      if (files.length == 0) {
        createItem(files, j, 'data', item);
      } else if (files[j].data[files[j].data.length - 1].includes(item.slice(0, pos))) {
        files[j].data.push(item);
      } else {
        j++;
        createItem(files, j, 'data', item);
      }
    });
    console.log(files);

    我决定直接在匹配循环中的文件数组中创建对象,并使用一个附加函数来创建这些对象的必要属性。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5