Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从另一个数组返回一个新的N元素数组的简洁方法?香草JavaScript

从另一个数组返回一个新的N元素数组的简洁方法?香草JavaScript
EN

Stack Overflow用户
提问于 2019-12-30 02:09:28
回答 3查看 120关注 0票数 0

我有一个给定的数组,其元素数量不确定,数组可以是数字或字符串,然后我需要从第一个数组的迭代元素生成一个新的N元素数组。

我已经有了一个函数来完成它,但是只有当原始数组是连续的数字时,它才能工作,它不适用于字符串。关于如何实现这一点,我有无数的想法。我可以将数组连接到一个新的数组,直到它等于或大于所需的元素数量,然后将新的数组长度设置为所需的数量,但是是否有一种更简洁和优雅的方法呢?

IDEA 01 码页

代码语言:javascript
运行
AI代码解释
复制
function populateArray(qty) {
  // Array to populate from
  let array = [1,2,3];
  //Determine the Range Length of the array and assign it to a variable
  let min = array[0];
  let max = array[array.length - 1];
	const rangeLength = (max - min + 1);
	//Initialize uniqueArray which will contain the concatenated array
	let uniqueArray = [];
	//Test if quantity is greater than the range length and if it is,
    //concatenate the array to itself until the new array has equal number of elements or greater
	if (qty > rangeLength) {
		//Create an array from the expansion of the range
		let rangeExpanded = Array.from(new Array(rangeLength), (x,i) => i + min);
		while (uniqueArray.length < qty) {
			uniqueArray = uniqueArray.concat(rangeExpanded);
		}
	}
  // Remove additional elements
  uniqueArray.length = qty
	return uniqueArray;
}

console.log(populateArray(13))

IDEA 02 码页,但它用整个原始数组填充新数组13次,而不是迭代项。

代码语言:javascript
运行
AI代码解释
复制
// FILL A NEW ARRAY WITH N ELEMENTS FROM ANOTHER ARRAY
let array = [1,2,3];
let length = 13;
let result = Array.from( { length }, () => array );
                        
console.log(result);

预期结果是1,2,3,2,3,1,2,3,3,1如果原始数组是由字符串组成的,那么预期的结果将是狗、猫、羊、狗

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-30 03:15:21

我将使用@CertainPerformance的回答。但这里有一种不同的方法,只是为了开箱即用的想法

代码语言:javascript
运行
AI代码解释
复制
// A function for getting an index up to length's size 
function getIDX(idx, length){
return idx <= length ? idx : getIDX(idx-length, length); 
}


const newArrayLength = 13;
const sourceArray = [1,2,3];
const resultArray = [];
for(let i=0; i< newArrayLength; i++){
resultArray[i]=sourceArray[getIDX(i+1, sourceArray.length)-1];
}

编辑1:我比较了这种方法与这里描述的其他方法的性能,而且如果您想要创建一个非常大的新数组(例如: newArrayLength= 10000),那么getIDX()函数需要很长时间才能完成,因为调用堆栈的大小。因此,我通过删除递归改进了getIDX()函数,现在复杂度是O(1),请检查它:

代码语言:javascript
运行
AI代码解释
复制
function getIDX(idx, length){
if (length === 1) {return idx};
const magicNumber = length * (Math.ceil(idx/length)-1);
 return idx - magicNumber;
}

使用新的getIDX()函数,这种方法似乎是最具表现力的。您可以看看这里的测试:https://jsbench.me/v7k4sjrsuw/1

票数 1
EN

Stack Overflow用户

发布于 2019-12-30 02:14:07

您可以稍微调整一下第二个想法--计算需要重复初始数组的次数,以求出所需的总项数,然后将其和.slice压平。

代码语言:javascript
运行
AI代码解释
复制
let array = [1,2,3];
let length = 13;
const fromLength = Math.ceil(length / array.length);
let result = Array.from( { length: fromLength }, () => array )
  .flat()
  .slice(0, length);

console.log(result);

票数 2
EN

Stack Overflow用户

发布于 2019-12-30 02:44:19

您可以使用modulo操作符。特别感谢@Vlaz的缩短版本:

代码语言:javascript
运行
AI代码解释
复制
Array.from({ length:length }, (e, i) => array[ i  % array.length ])

举个例子:

代码语言:javascript
运行
AI代码解释
复制
let array = [1,2,3];
let length = 13;
const result = Array.from({ length:length }, 
    (e, i) => array[ i  % array.length ]);
console.log(result);

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

https://stackoverflow.com/questions/59529059

复制
相关文章
chrome浏览器拦截(block)特定网站某些请求的方法
最近遇到了一个需求,需要在一个系统里面点击某些按钮的时候不要触发某个请求(例如操作日志) 正好Chrome浏览器就可以很好地满足这一愿望,仅需安装一个扩展(Extension)程序----"Request blocker"
薛定喵君
2020/07/27
9.5K0
Chrome 插件网络相关接口的应用
本文介绍了Chrome插件网络相关接口的应用,包括chrome.webRequest.XXX、chrome.proxy.XXX、chrome.webNavigation.XXX等,并探讨了如何利用这些接口实现网络流量统计、代理管理和自定义请求/响应头等功能。同时,还介绍了如何实现自定义请求/响应头的插件和实现SwitchySharp的功能。
腾讯IVWEB团队
2017/03/13
1.9K0
Chrome插件网络相关接口的应用
抓包的时候偶尔会遇到返回的json串在prevew窗口不能显示成对象的形式,如下:
IMWeb前端团队
2019/12/03
6360
Chrome插件网络相关接口的应用
Chrome插件网络相关接口的应用
chrome.webRequest.XXX 用于网络流量的统计监控、修改请求和响应 chrome.proxy.XXX 用于代理的管理 抓包的时候偶尔会遇到返回的json串在prevew窗口不能显示
IMWeb前端团队
2017/12/29
7230
Chrome插件网络相关接口的应用
使用 Google 浏览器 Chrome 的扩展
Google 浏览器 Chrome 是我现在主要使用的浏览器,Chrome 更新到 2.0 之后,除了支持 Greasemonkey 之外,也开始支持扩展。 要让 Google 浏览器支持扩展,你首先要把 Chrome 升级到 2.0 最新版本,然后找到 Chrome 的快捷方式,右键单击它,然后选择属性,然后在 target 输入框里面添加这个参数: --enable-extensions,重启浏览器就可以了。
Denis
2023/04/14
1.1K0
使用 Google 浏览器 Chrome 的扩展
谷歌被强制出售Chrome!
当地时间11月18日,据外媒报道,美国司法部正在请求此前在8月裁定谷歌非法垄断搜索市场的阿米特·梅塔(Amit P.Mehta)法官采取措施,要求谷歌出售其Chrome浏览器。同时,司法部还希望能对谷歌在数据许可和AI(人工智能)等方面给出限制措施。并将安卓操作系统和谷歌应用商店解绑。
码农突围
2024/11/26
1030
谷歌被强制出售Chrome!
RobotFrameWork中使用Chrome浏览器
1、按F5搜索关键字[Open Browser],可以看到其帮助信息中说明了不同浏览器时browser参数的值
未来sky
2018/08/30
2.2K0
RobotFrameWork中使用Chrome浏览器
如何使用chrome浏览器调试?
在chrome浏览器中打开http://localhost:3000,按F12,或者右击->单击【检查】.
贺贺V5
2018/08/21
1.1K0
如何使用chrome浏览器调试?
软件测试|Chrome 浏览器+Postman做接口测试
如果把测试简单分为两类,那么就是客户端测试和服务端测试。客户端的测试包括UI测试,兼容性测试等,服务端测试包括接口测试。接口测试检查数据的交换,传递和控制管理过程,它绕过了客户端,直接对服务端进行测试。
霍格沃兹测试开发Muller老师
2023/01/09
6950
VDI 优化之 Windows 7 关闭 Aero 并强制使用特定主题
在部署虚拟桌面的时候,由于服务器端平常不会部署显卡,因此很多的图形解码都需要依靠CPU来进行运算。Windows 7默认提供了比较炫的Aero效果用来提高用户的图形体验,但是在VDI环境中我们往往需要考虑虚拟桌面的可扩展性与运行性能,此时如果在虚拟桌面中使用Aero无疑会极大增加虚拟桌面的CPU使用率、内存占用造成用户的日常使用体验较差。
SuperDream
2019/02/28
1.3K0
chrome浏览器对应驱动_chrome手机浏览器
chrome浏览器驱动下载地址:http://chromedriver.storage.proxy.ustclug.org/index.html
全栈程序员站长
2022/08/03
1.4K0
chrome浏览器对应驱动_chrome手机浏览器
使用 Chrome 浏览器调试 WebView 中的网页
然后呢,运行 Android 程序,再打开 Chrome 浏览器,在地址栏输入 chrome://inspect/#devices,回车,然后找到这个 device,点击“inspect”,就欧了。
LeoXu
2018/08/15
1.1K0
国产浏览器内核为何使用Chrome
国产浏览器使用谷歌内核我觉得是不错的选择。 也许有人问为什么不自己造一个?为什么不使用其它的呢?那推荐什么流量器呢?
乔千
2020/04/16
9710
国产浏览器内核为何使用Chrome
ssh 使用指定网卡 连接特定网络
有时候,当电脑有两个网卡时;一个网卡 连接免费网络,一个网卡连接收费网络。这样当你想使用免费网络与远程服务器建立连接,使用诸如scp命令或者 ssh 隧道之类传输大文件。这时候你需要指定特定的特定的网卡来建立连接了。
西湖醋鱼
2020/12/30
3.4K0
chrome浏览器关闭http强制调转https问题解决-亲测有效
未经允许不得转载:肥猫博客 » chrome浏览器关闭http强制调转https问题解决-亲测有效
超级小可爱
2023/02/20
3.3K0
软件测试 | Chrome 浏览器+Postman还能这样做接口测试 ?
如果把测试简单分为两类,那么就是客户端测试和服务端测试。客户端的测试包括UI测试,兼容性测试等,服务端测试包括接口测试。接口测试检查数据的交换,传递和控制管理过程,它绕过了客户端,直接对服务端进行测试。
霍格沃兹测试开发
2021/07/14
1.1K0
使用 Chrome 插件 Vimium 打造黑客浏览器
之前一直用 cVim,与 Vimium 功能类似,但是之后不在更新了,故转战到 Vimium。
叨叨软件测试
2020/04/14
1.4K0
使用 Chrome 插件 Vimium 打造黑客浏览器
python使用selenium模拟操作Chrome浏览器
1、安装selenium pip install selenium 2、打开浏览器登录获取cookie from selenium import webdriver import time import json driver = webdriver.Chrome() # 创建Chrome对象. # 操作这个对象. driver.get('https://baidu.com') # get方式访问 time.sleep(5) el = driver.find_element_by_x
JQ实验室
2022/02/10
1.2K0
Google 浏览器 Chrome 的使用率和分析
Google 浏览器 Chrome 的发布卷起了博客界对其讨论的狂潮,哈哈 🙂 很多 blogger 都贴出自己博客这两天 Google 浏览器 Chrome 的使用率。我也不免俗,也贴下我博客的情况。 根据 Google Anlytics 的9月4号的数据统计,共有 77.09% 通过 IE 访问我爱水煮鱼,然后 FireFox 占到了13.63%,Chrome 已经达到了第三,有 6.58%。我相信这个比例会越来越高。 我爱水煮鱼2008年9月4号 Google Analytics 统
Denis
2023/04/14
4560
Google 浏览器 Chrome 的使用率和分析
Google 浏览器:Chrome
很久之前就有传闻说 Google 会推出浏览器,但是一直没有实际的东西流出。但是 Google 总是以出人意外的方式推出新产品,让大家免费为他宣传,这次以漫画书的方式来个预告,展示了 Chrome 的细节,并且很快今天今天就推出 beta 版。 🙂 当然我也很快下载使用。 Google Chrome 是 Google 最新推出的一款开源浏览器,目前只有 Windows 版本,但是很快会推出 Mac 和 Linux版本。Chrome 借鉴了苹果的 WebKit(Safari 浏览器使用的引擎)、Mozilla
Denis
2023/04/14
9030
Google 浏览器:Chrome

相似问题

如何强制应用程序(如Firefox)使用特定的网络接口?

40

强制实际网络使用-禁用应用程序的回送接口

10

为特定用户更改网络接口?

10

用于特定接口的自动配置网络计划

10

如何防止NetworkManager控制特定的网络接口?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档