首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将三维数组分割为三个in循环?

如何将三维数组分割为三个in循环?
EN

Stack Overflow用户
提问于 2018-10-02 22:10:07
回答 2查看 75关注 0票数 0

我试图创建一个像这样的三维数组:

代码语言:javascript
复制
        let insPerDay = []
        let insDuringThisWeek = [];
        let  insDuringThisWeek_temp = [[], [], [], [], [], [], []]; 
        for (var i = 0; i < spaceIterationInsWeek.length; i++){
            // this loop will repeat a variable amount of times but in this example it repeats twice   
            for (let k=0; k<weekArray.length; k++) {
            // will repeat a variable amount of times but in this example it repeats 7 times    
                for (let j = 0; j < spaceIterationInsWeek[i].length; j ++) {
                // will repeat a variable amount of time (I think in this case it's 167 times, 104 the first loop, 63 the second);
                    if (spaceIterationInsWeek[i][j] > weekArray[k][0] && spaceIterationInsWeek[i][j] < weekArray[k][1]) {
                        insDuringThisWeek_temp[k].push(spaceIterationInsWeek[i][j]);    
                    }   
                } 
                insDuringThisWeek.push(insDuringThisWeek_temp[k]);                                     
            }     

             console.log(insDuringThisWeek.slice()); 
            insPerDay.push(insDuringThisWeek.slice());
            console.log(insPerDay);                
        // insDuringThisWeek.push(insDuringThisWeek_temp);                            
        }  

现在,我在console.is上记录了以下内容:

注意,第一次运行子循环时,insDuringThisWeek.slice()正在记录数组( 28 ),但在内部,当我展开视图时,它实际上表示的是36,而不是28。我知道这与数组是通过引用传递的这一事实有关,这就是为什么我试图使用slice()来防止这种情况。

最后,预期的结果应该是:1父数组、2子数组、各有7孙子数组。那么那些7孙子数组应该有不同的长度..。

类似于:

代码语言:javascript
复制
(2) [Array(7), Array(7)]
    > 0: (7) [Array(28), Array(12), Array(8), Array(0), Array(0), Array(50), Array(6)]
    > 1: (7) [Array(8), Array(11), Array(3), Array(0), Array(0), Array(37), Array(4)]

现在,数组是这样加起来的:

代码语言:javascript
复制
(2) [Array(7), Array(14)]
    > 0: (7) [Array(36), Array(23), Array(11), Array(0), Array(0), Array(87), Array(10)]
    > 1: (14) [Array(36), Array(23), Array(11), Array(0), Array(0), Array(87), Array(10), Array(36), Array(23), Array(11), Array(0), Array(0), Array(87), Array(10)]

是否有一种方法可以使用三个循环逻辑来实现这一点?

用于spaceIterationInsWeek的“复制/可传递”数据

代码语言:javascript
复制
  var spaceIterationInsWeek = [["1538032574112", "1538032574299", "1538032574489", "1538032574707", "1538032574958", "1538032580589", "1538032580744", "1538032583050", "1538035431634", "1538035432105", "1538044237902", "1538044253095", "1538089207793", "1538089207972", "1538089208184", "1538089209765", "1538089209935", "1538089210172", "1538140319898", "1538140320415", "1538393131974", "1538393132133", "1538393132301", "1538393134682", "1538419054736", "1538419056057", "1538419056445", "1538421078992", "1538423320582", "1538423324199", "1538423328179", "1538423331484", "1538423472877", "1538423584874", "1538423586801", "1538423604206", "1538423664249", "1538423668981", "1538423682914", "1538423691802", "1538423866031", "1538423867420", "1538423868327", "1538423875373", "1538424176251", "1538424179511", "1538424231217", "1538424283692", "1538424327861", "1538424327866", "1538424327868", "1538424327871", "1538424327877", "1538424327882", "1538424327884", "1538424327891", "1538424327896", "1538426250753", "1538426251268", "1538426251642", "1538428174561", "1538428174925", "1538428175168", "1538428179449", "1538428179612", "1538428185771", "1538428199625", "1538428204510", "1538428204700", "1538428204883", "1538497882619", "1538498290347", "1538498319612", "1538498370580", "1538498465625", "1538498510231"],["1538033851202", "1538035355166", "1538035355949", "1538035370713", "1538043037913", "1538043065714", "1538043065993", "1538043530533", "1538043531900", "1538043533828", "1538044225832", "1538089267124", "1538089267318", "1538089267543", "1538393117968", "1538393118102", "1538393118254", "1538393119966", "1538393120110", "1538393120362", "1538393120538", "1538393120722", "1538414187921", "1538414188175", "1538414188327", "1538414191291", "1538414191516", "1538424651376", "1538424672070", "1538424672073", "1538424672077", "1538424672080", "1538424673236", "1538424673238", "1538424673241", "1538424673244", "1538424679001", "1538424679010", "1538424679014", "1538424679017", "1538428236679", "1538428236846", "1538428237012", "1538428237172", "1538428237341", "1538428237491", "1538428237649", "1538428237816", "1538428237982", "1538428238159", "1538428238334", "1538498266744", "1538498341583", "1538498481082", "1538498494065"]]

weekArray的“复制/可传递”数据:

代码语言:javascript
复制
   var weekArray = [[1538002800000, 1538089200000], [1538089200000, 1538175600000],[1538175600000, 1538262000000], [1538262000000, 1538348400000],[1538348400000, 1538434800000],[1538434800000, 1538521200000],[1538521200000, 1538607600000]]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-02 23:29:08

这是另一种方法.可能是,也可能不是你正在寻找的确切输出。

代码语言:javascript
复制
var spaceIterationInsWeek = [
  ["1538032574112", "1538032574299", "1538032574489", "1538032574707", "1538032574958", "1538032580589", "1538032580744", "1538032583050", "1538035431634", "1538035432105", "1538044237902", "1538044253095", "1538089207793", "1538089207972", "1538089208184", "1538089209765", "1538089209935", "1538089210172", "1538140319898", "1538140320415", "1538393131974", "1538393132133", "1538393132301", "1538393134682", "1538419054736", "1538419056057", "1538419056445", "1538421078992", "1538423320582", "1538423324199", "1538423328179", "1538423331484", "1538423472877", "1538423584874", "1538423586801", "1538423604206", "1538423664249", "1538423668981", "1538423682914", "1538423691802", "1538423866031", "1538423867420", "1538423868327", "1538423875373", "1538424176251", "1538424179511", "1538424231217", "1538424283692", "1538424327861", "1538424327866", "1538424327868", "1538424327871", "1538424327877", "1538424327882", "1538424327884", "1538424327891", "1538424327896", "1538426250753", "1538426251268", "1538426251642", "1538428174561", "1538428174925", "1538428175168", "1538428179449", "1538428179612", "1538428185771", "1538428199625", "1538428204510", "1538428204700", "1538428204883", "1538497882619", "1538498290347", "1538498319612", "1538498370580", "1538498465625", "1538498510231"],
  ["1538033851202", "1538035355166", "1538035355949", "1538035370713", "1538043037913", "1538043065714", "1538043065993", "1538043530533", "1538043531900", "1538043533828", "1538044225832", "1538089267124", "1538089267318", "1538089267543", "1538393117968", "1538393118102", "1538393118254", "1538393119966", "1538393120110", "1538393120362", "1538393120538", "1538393120722", "1538414187921", "1538414188175", "1538414188327", "1538414191291", "1538414191516", "1538424651376", "1538424672070", "1538424672073", "1538424672077", "1538424672080", "1538424673236", "1538424673238", "1538424673241", "1538424673244", "1538424679001", "1538424679010", "1538424679014", "1538424679017", "1538428236679", "1538428236846", "1538428237012", "1538428237172", "1538428237341", "1538428237491", "1538428237649", "1538428237816", "1538428237982", "1538428238159", "1538428238334", "1538498266744", "1538498341583", "1538498481082", "1538498494065"]
]

var weekArray = [
  [1538002800000, 1538089200000],
  [1538089200000, 1538175600000],
  [1538175600000, 1538262000000],
  [1538262000000, 1538348400000],
  [1538348400000, 1538434800000],
  [1538434800000, 1538521200000],
  [1538521200000, 1538607600000]
]


var out = spaceIterationInsWeek.map(space => {
  let grouped = Array.from({
    length: weekArray.length
  }).map(_ => []); // create an empty array for each week pair
  
  space.forEach(ts => {
    let idx = weekArray.findIndex(([start, end]) => ts >= start && ts < end); // find which day the space falls into
    if (idx >= 0) {
      grouped[idx].push(ts); // group it using the week-pair's index
    } else {
      console.error(`Timestamp ${ts} not found in any week array`) // if no time range found, error!
    }
  })
  return grouped;
})

console.log(out);

票数 1
EN

Stack Overflow用户

发布于 2018-10-02 23:16:02

只需在最后清除数组:

代码语言:javascript
复制
        let insPerDay = []
        let insDuringThisWeek = [];
        let  insDuringThisWeek_temp = [[], [], [], [], [], [], []]; // clean array
        for (var i = 0; i < spaceIterationInsWeek.length; i++){
            // will repeat the number of depts (i =2)  

            for (let k=0; k<weekArray.length; k++) {
            // will repeat 7 times  (j =7)   
                for (let j = 0; j < spaceIterationInsWeek[i].length; j ++) {
                // will repeat the number of ins
                    if (spaceIterationInsWeek[i][j] > weekArray[k][0] && spaceIterationInsWeek[i][j] < weekArray[k][1]) {
                        insDuringThisWeek_temp[k].push(spaceIterationInsWeek[i][j]);    
                    }   

                } 
                insDuringThisWeek.push(insDuringThisWeek_temp[k].slice());   
                console.log(insDuringThisWeek);             

            }     
            insPerDay.push(insDuringThisWeek);
        //HERE
            insDuringThisWeek = [];
            insDuringThisWeek_temp = [[], [], [], [], [], [], []];
            console.log(insPerDay);


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

https://stackoverflow.com/questions/52617134

复制
相关文章

相似问题

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