热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何将数组分割成两半,直到达到一定大小的块?-Howtosplitanarrayinhalfuntilchunksofacertainsizearereached?

Ihaveanarraywithavariablelengththatisgreaterthan3andcanbeoddoreven.我有一个可变长度大于3的数组

I have an array with a variable length that is greater than 3 and can be odd or even.

我有一个可变长度大于3的数组可以是奇数或偶数。

For example: var arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];

例如:var arr =[a,b,c,d,e,f,g,h,'我',' j '];

Now I want to split that array into halves.

现在我想把这个数组分成两半。

['a', 'b', 'c', 'd', 'e'] and ['f', 'g', 'h', 'i', 'j']

[a,b,c,d ',' e ']和[‘f’、‘g’、‘h’,‘我’,' j ']

Next I want to split those chunks into halves and to keep doing that until the chunks have a length of 3 or 2.

接下来,我要把这些块分割成两半,直到这些块的长度是3或2。

Finally I want to store those chunks in a new array.

最后,我想将这些块存储在一个新的数组中。

var newarr = [['a','b','c'],['d','e'],['f','g','h'],['i','j']];

var newarr =[[' a ',' b ',' c '],[' d ',' e '],[' f ',' g ',' h '],['我',' j ']];

How would I do this?

我该怎么做呢?

2 个解决方案

#1


4  

A self-suggesting way to do this is to use a recursive function F: for an input array arr if its length is <= 3 then the result is [arr], otherwise it is F(first_half_of_arr) concatenated with F(second_half_of_arr).

一种自我建议的方法是使用递归函数F:对于输入数组arr,如果它的长度为<= 3,那么结果是[arr],否则它是F(first_half_of_arr)与F(second_half_of_arr)连接在一起。

In code this translates to:

在代码中,这翻译为:

function recursiveSplit(arr) { 
    return arr.length <= 3 ? [arr] : 
        recursiveSplit(arr.slice(0, Math.ceil(arr.length / 2)))
        .concat(recursiveSplit(arr.slice(Math.ceil(arr.length / 2))));
}

You can exclude the Math.ceil calls, but if you do you are going to get the 2-length chunks before the 3-length ones in your result.

你可以把数学排除在外。ceil调用了,但是如果你这样做了,你会得到2个长度的块,而不是3个长度的块。

Now in practice an iterative implementation should be much more performant than a recursive one because it won't need to create and abandon small arrays entirely, so if this is expected to operate on large arrays you should probably stay away from recursion.

实际上,迭代实现的性能应该比递归实现高得多,因为它不需要完全创建和放弃小数组,所以如果期望它对大数组进行操作,那么您应该远离递归。

#2


0  

var arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
var arr1 = arr.splice(0, Math.ceil(arr.length / 2));

That will split an array in half, so now arr contain second half of original array and arr1 contains first half.

这将把数组分割成两半,所以现在arr包含原始数组的后半部分,arr1包含前半部分。

You should be able to just repeat in a while loop:

你应该能够在一段时间内重复:

while (arr > 3) {
    //continue splicing
}

If you don't think this answer is good enough (It probably makes no sense to anyone other than me, I am so tired right now) please just comment rather than disliking.

如果你觉得这个答案不够好(除了我,其他人可能觉得这个答案毫无意义,我现在太累了),请评论一下,而不是不喜欢。


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
author-avatar
雷宠专业摄影工作室
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有