찾다
웹 프론트엔드JS 튜토리얼JavaScript Array Flatten 및 recursion_javascript 기술 사용 소개

JavaScript를 사용하여 [1,2,3,[4,5, [6,7]], [[[8]]]]와 같은 배열을 [1,2,3,4,5, 6, 7,8] 어떨까요? 전설적인 Array Flatten.

이런 종류의 문제를 처리하려면 일반적으로 알고리즘에 따라 프로그램을 반복하는 재귀가 필요합니다. 어떤 책에서는 "재귀는 강력한 프로그래밍 기술입니다."라고 말합니다. 음, 재귀는 단지 JavaScript에만 속하는 것은 아닙니다. 재귀는 어려울 수도 있고 상대적으로 간단할 수도 있습니다(일반적으로 여전히 상대적으로 어렵습니다). 위의 문제를 해결하려면 재귀를 사용하는 것이 더 적합해야 합니다. 작업자는 이전에 이를 구현했는데, 이는 재귀 사용의 간단한 예입니다.

코드 복사 코드는 다음과 같습니다.

flatten: function(ac){
var array = [];
var group = this.arr
if(ac) group = ac; var i = 0; i if(group[i] instanceof Array){
array = array.concat(this.Flatten(group[i])); >}else{
array = array.concat(group[i]);
}
}
return array
}


in(group) [i] instanceof Array ), 함수 자체를 호출하고 매개변수를 전달하여 재귀를 수행합니다. Array.js를 리팩토링하던 중 프레임워크이기 때문에 추상적인 것들을 많이 사용하지 않으면 너무 아깝다는 생각이 들었습니다. 따라서 다시 호출하는 것보다는 추상화된 정적 함수를 호출하는 것이 더 좋습니다. 여기에는 for 루프가 있습니다. 즉, 각각이 필요하다는 뜻입니다. 결과는? 네 단어, 구현하기 어렵습니다. 항상 배열을 생성하고 마지막으로 이 새 배열을 반환해야 하기 때문에 이를 조정하기 위해 새 함수를 추출해야 합니다. 이건 원래 의도에 어긋나는 것 아닌가요?

온라인으로 살펴보고 최종적으로 프로토타입을 결정했습니다. 그의 구현 방법은 재귀 증가를 처리하는 함수를 추상화한 다음 이 함수를 사용하여 재귀를 수행하는 것입니다. 어떻게 말하나요? 저는 이것을 프레임워크라고 말하고 싶습니다. 다음은 재귀를 처리하는 함수입니다.


function inject(memo , iterator, context) {
this.each(function(value, index) {
memo = iterator.call(context, memo, value, index);
}); > return memo;
}


이 flatten 함수의 최종 구현은 다음과 같습니다. 이 코드는 매우 아름답습니다.


복사 code 코드는 다음과 같습니다. function flatten() {
return this.inject([], function(array, value) {
if (Object.isArray( value))
return array.concat(value.platten());
array.push(value);
return array;
}); }


물론 각 함수인 for 루프를 처리하려면 또 다른 추상 함수가 필요합니다. 그건 그렇고, 이 각 함수를 flatten으로 가져오고 jQuery의 작동 방식을 배우고 기본 지원을 추가하세요. 물론 배열뿐만 아니라 순수 객체도 처리할 수 있습니다.



코드 복사
코드는 다음과 같습니다. each: function (callback,bind) { var isObject = arale.typeOf(this.obj ) === 'object',
i = 0,
key;

if (isObject) {
var obj = this.obj
for (obj의 키) {
if (callback.call(bind, key, obj[key]) === false) {
break
}
}
} else {
var arr = this.obj;
if (Array.prototype.forEach) {

// 사용자가 false를 반환하면 계속 실행됩니다.
// 네이티브는 매우 당황스럽습니다. 그대로 둬야 할까요? 아니면 그대로 두시겠습니까?
return [].forEach.call(arr, callback, bin)
for (var value = arr[0], length = arr.length; }
}


요즘 자바스크립트로 많이 놀고 있어요. 최근 기사와 팀 내부 블로그에 올라온 글을 살펴보니 모두 JS로 작성되어 있습니다. 당혹스러운. 큰 변화인 것 같습니다. 균형을 맞춰야 합니다.
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
使用C#中的Array.Sort函数对数组进行排序使用C#中的Array.Sort函数对数组进行排序Nov 18, 2023 am 10:37 AM

标题:C#中使用Array.Sort函数对数组进行排序的示例正文:在C#中,数组是一种常用的数据结构,经常需要对数组进行排序操作。C#提供了Array类,其中有Sort方法可以方便地对数组进行排序。本文将演示如何使用C#中的Array.Sort函数对数组进行排序,并提供具体的代码示例。首先,我们需要了解一下Array.Sort函数的基本用法。Array.So

简单明了的PHP array_merge_recursive()函数使用方法简单明了的PHP array_merge_recursive()函数使用方法Jun 27, 2023 pm 01:48 PM

在进行PHP编程时,我们常常需要对数组进行合并。PHP提供了array_merge()函数来完成数组合并的工作,不过当数组中存在相同的键时,该函数会覆盖原有的值。为了解决这个问题,PHP在语言中还提供了一个array_merge_recursive()函数,该函数可以合并数组并保留相同键的值,使得程序的设计变得更加灵活。array_merge

如何使用PHP中的array_combine函数将两个数组拼成关联数组如何使用PHP中的array_combine函数将两个数组拼成关联数组Jun 26, 2023 pm 01:41 PM

在PHP中,有许多强大的数组函数可以使数组的操作更加方便和快捷。当我们需要将两个数组拼成一个关联数组时,可以使用PHP的array_combine函数来实现这一操作。这个函数实际上是用来将一个数组的键作为另一个数组的值,合并成一个新的关联数组。接下来,我们将会讲解如何使用PHP中的array_combine函数将两个数组拼成关联数组。了解array_comb

PHP array_fill()函数用法详解PHP array_fill()函数用法详解Jun 27, 2023 am 08:42 AM

在PHP编程中,数组是一种非常重要的数据结构,能够轻松地处理大量数据。PHP中提供了许多数组相关的函数,array_fill()就是其中之一。本篇文章将详细介绍array_fill()函数的用法,以及在实际应用中的一些技巧。一、array_fill()函数概述array_fill()函数的作用是创建一个指定长度的、由相同的值组成的数组。具体来说,该函数的语法

Python中的Array模块怎么使用Python中的Array模块怎么使用May 01, 2023 am 09:13 AM

Python中的array模块是一个预定义的数组,因此其在内存中占用的空间比标准列表小得多,同时也可以执行快速的元素级别操作,例如添加、删除、索引和切片等操作。此外,数组中的所有元素都是同一种类型,因此可以使用数组提供的高效数值运算函数,例如计算平均值、最大值和最小值等。另外,array模块还支持将数组对象直接写入和读取到二进制文件中,这使得在处理大量数值数据时更加高效。因此,如果您需要处理大量同质数据,可以考虑使用Python的array模块来优化代码的执行效率。要使用array模块,首先需要

Java中的ArrayStoreException异常的常见原因是什么?Java中的ArrayStoreException异常的常见原因是什么?Jun 25, 2023 am 09:48 AM

在Java编程中,数组是一种重要的数据结构。数组可以在一个变量中存储多个值,更重要的是可以使用索引访问每个值。但是在使用数组时,可能会出现一些异常,其中之一是ArrayStoreException。本文将讨论ArrayStoreException异常的常见原因。1.类型不匹配数组在创建时必须指定元素类型。当我们试图将不兼容的数据类型存储到一个数组中时,就会抛

PHP array_change_key_case()函数使用方法介绍PHP array_change_key_case()函数使用方法介绍Jun 27, 2023 am 10:43 AM

在PHP编程中,数组是一个经常用到的数据类型。而关于数组的操作函数也是相当多的,其中包括了array_change_key_case()函数。该函数可以将数组中键名的大小写进行转换,从而方便我们进行数据的处理。本文就来介绍一下PHP中array_change_key_case()函数的使用方法。一、函数语法及参数array_change_ke

Java中的ArrayIndexOutOfBoundsException异常常见原因是什么?Java中的ArrayIndexOutOfBoundsException异常常见原因是什么?Jun 24, 2023 pm 10:39 PM

Java是一种非常强大的编程语言,广泛应用于各种开发领域。但是,在Java编程过程中,开发人员经常会遇到ArrayIndexOutOfBoundsException异常。那么,这个异常的常见原因是什么呢?ArrayIndexOutOfBoundsException是Java中常见的一个运行时异常。它表示在访问数据时,数组下标超出了数组的范围。常见的原因包括以

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음