首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从另一个数组返回一个新的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

复制
相关文章
嵌套对象转map
嵌套对象转map,当对象嵌套层次太深,获取子对象的值及其不便,为解决这一问题,于是对象转map,有key就能得到相应的value。
全栈程序员站长
2022/08/30
1.7K0
Elasticsearch使用:嵌套对象
官网地址:https://www.elastic.co/guide/cn/elasticsearch/guide/current/nested-objects.html
HLee
2021/04/23
6.3K0
Elasticsearch使用:嵌套对象
CouchBase_couchbase数据库
简单来说CouchBase是一款开源的,分布式的nosql数据库,主要用于分布式缓存和数据存储领域。能够通过manage cache提供快速的亚毫米级别的k-v存储操作,并且提供快速的查询和其功能强大的能够指定SQL-like查询的查询引擎。
全栈程序员站长
2022/09/21
9540
CouchBase_couchbase数据库
(九)定义嵌套的对象类型
# 定义嵌套的对象类型 说明 在 TypeSctipr 里面定义嵌套类型,和定义它的外层类型是一样的 第一种方式是写死在里面的 interface product { title: string price: number categroy: { name: string } } 第二种方式在外面定义 interface product { title: string price: number categroy: Categroy
老怪兽
2023/02/22
2K0
面向对象之类的成员,嵌套
类的成员可分为三大类:字段丶方法和属性 一丶字段   字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同.   普通字段属于对象   静态字段属于类 class Foo: #类变量(静态字段) country = "你好" def __init__(self,name): # 实例变量(普通字段) self.name = name def too(self): print("====
py3study
2020/01/19
1.5K0
面向对象之类的成员,嵌套
ES6解构嵌套对象
让我们先回忆一下ES6的对象解构,本文介绍各种ES6的对象解构用法,你用过哪一种?
IMWeb前端团队
2019/12/03
1.2K0
ES6解构嵌套对象
本文作者:IMWeb zzbozheng 原文出处:IMWeb社区 未经同意,禁止转载 让我们先回忆一下ES6的对象解构,本文介绍各种ES6的对象解构用法,你用过哪一种? 最基本的解构 在对
IMWeb前端团队
2018/01/08
2.2K0
选择块参照中嵌套的实体
在利用ObjectARX进行CAD二次开发时,如何选择块参照中嵌套的实体,并进行进行下一步操作?这个问题的难点是:如何判断用户选中的实体到底是块参照里面的非嵌套对象实体?还是块参照中嵌套的块参照的实体?本文利用全局函数acedNEnsSelP解决了这个问题,并可实现:如果用户选择块参照中嵌套的实体,直接视为用户选择了这个嵌套的块参照,效果如图。
用户3519280
2023/07/31
2801
5.5 选择的嵌套和switch语句
2、应该注意if与else的配对关系。else总是与它上面的最近的未配对的if配对。
小林C语言
2019/07/12
1.4K0
redis和couchbase的比较
1 Redis数据库完全在内存中,因此处理速度非常快,每秒能执行约11万集合,每秒约81000+条记录;
全栈程序员站长
2022/07/19
1.6K0
redis和couchbase的比较
3.3 选择的嵌套和switch多分支
为了让大家有个明确的学习方向,请大家分享给有需要的人,谢谢! 一、选择结构的嵌套 if() if() 语句1 else () 语句2 语句1和语句2是内嵌i
小林C语言
2019/08/19
6220
js选择对象
返回页面所有xxx类名对象的数组,要想取出其中的一个对象需采用数组的标识[i], document.getElementsByClassName("xxx")[i],否则无返回结果。
zkq
2020/04/20
5.5K0
js选择对象
python-函数的对象、函数嵌套、名称
内存存储变量名与变量间的绑定关系的空间(存放变量名的空间),这个空间被称为名称空间。
py3study
2020/01/15
2.4K0
PHPJSON嵌套对象和数组的解析方法
在PHP编程开发中,JSON是一种非常常用的数据格式。它具有简单、轻量和易于解析的特点,非常适合用于数据交换和存储。当我们处理JSON数据时,经常需要解析嵌套的对象和数组,本文将介绍几种解析方法。
用户10354340
2023/07/26
3470
为什么从 MongoDB 转向 Couchbase ?
毫无疑问,MongoDB 是当前较为流行的可用于构建应用程序的一种 NoSQL 数据库。但就像许多以电子表格开始的“初学者”进行数据分析项目一样,当需要深入时,也需要进行升级。当公司的应用程序从“个人作坊”推广至企业规模运行时,他们经常会发现 MongoDB 已开始无法满足他们的业务诉求。
Luga Lee
2021/11/23
1.5K0
为什么从 MongoDB 转向 Couchbase ?
PHP面向对象-命名空间的嵌套和别名
命名空间可以嵌套定义,这意味着一个命名空间可以包含另一个命名空间。使用嵌套命名空间时,我们可以使用反斜杠“\”来表示命名空间的层级结构。
堕落飞鸟
2023/04/28
1.2K0
为什么从 MongoDB 转向 Couchbase ?
毫无疑问,MongoDB 是当前较为流行的可用于构建应用程序的一种 NoSQL 数据库。但就像许多以电子表格开始的“初学者”进行数据分析项目一样,当需要深入时,也需要进行升级。当公司的应用程序从“个人作坊”推广至企业规模运行时,他们经常会发现 MongoDB 已开始无法满足他们的业务诉求。
Luga Lee
2021/12/09
2.3K0
为什么从 MongoDB 转向 Couchbase ?
5.5 C语言选择的嵌套和switch语句
2、应该注意if与else的配对关系。else总是与它上面的最近的未配对的if配对。
小林C语言
2020/12/07
1.4K0
5.5 C语言选择的嵌套和switch语句
在 Linux CentOS 上安装 Couchbase Server
Couchbase 是一个开源的、分布式的、面向文档(document-oriented)的 NoSQL 数据库,并且内置了 Memcached 服务。本文分享的是自己在 Linux 上成功安装 Couchbase Server 的实际操作步骤。
星哥玩云
2022/07/03
1.3K0
el表达式的内置对象_IF嵌套函数
1.模拟需求:从一个商品集合中取出所有商品,第一个商品用它的第一张图片,第二个商品用它的第二张图片
全栈程序员站长
2022/09/19
2.7K0

相似问题

CouchBase指数嵌套元素

26

在COUCHBASE中嵌套

115

如何获得带有反应性couchbase的嵌套对象列表?

10

Couchbase -从对象数组中选择字段子集

10

嵌套字段的Couchbase聚合

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文