JavaScriptの基本(5) - アレイ

  私たちは皆知っているのtypeof演算(アレイ)が算出した値オブジェクトは、JavaScriptでは、配列は一般的に連続したインデックスと値のセットであり、そしてオブジェクトのセットは、多くの場合、不確実な属性と値で、その本質的な違いは、そのプロパティの値が連続しているあります(注:配列要素が疎アレイとして、不連続であってもよいです)。プログラミングでは、オブジェクトのグループは、継続的な指標値は、多くの利点を持っていました:インデックスの値が連続自動インクリメントの整数であるため、まず、ユーザーの配列を使用した場合は、プロパティ名を気にしないでください。ユーザーが列を簡単に横断することができますアクセスしたときに第二に、これはループのために行うことができます。それが作成されたときにJavaScriptエンジンについては、配列オブジェクトが原因で、配列が速くインデックス作成を完了することができ、メモリ割り当ての継続性、に、連続した拡張メモリのセットが割り当てられ、オブジェクトの配列は、多くの場合、より多く持っています優れたアクセス性能。

  要約すると、アレイは、オブジェクトの特殊な形態です。なぜ配列の概念は、あなたをNa別々に実行する必要がありますか?JavaScriptは例外ではありません、配列の一つが不可欠なデータ型で、任意のプログラミング言語では、私たちが直接金額をオブジェクトの配列を作成するために、配列を使用する場合、それはArray.prototypeを有益な配列操作の多くを継承します。考えてみて方法、これらの動作方法を実際のオブジェクトの配列するようにして区別しました。

配列を作成します。1.

  この方法は、配列リテラルの主に二つのタイプの配列を作成し、別のは、以下のように、アレイを作成するためのコンストラクタを呼び出すことです

let arr = [] //创建一个空数组
let arr2 = new Array(10) //第一个参数指定创建数组的长度,但是数组中没有存储值

  なお、ARR2は、指定された長さのちょうど配列である:配列に格納されている値を持たない(arr.length 10)、配列インデックス値をも定義されていません。

2.読み取りと書き込みの配列

  そして、読み、オブジェクトの同じ配列の書き込み。注次のような特殊な例という。

  1.我々は、角括弧([])を必要とするので、ドット演算子の計算のためポイントアクセスの配列要素ではなく整数値として(。)演算子アクセスできないの配列要素。

  2.配列インデックス一般に0から始まり、しかし絶対的ではない、[-1] = 1が可能な限りそうしないと、-1の指定された属性値を作成します。

  3.対象となる配列は、素子アレイゲッター、プロトタイプ要素から継承することができ、セッターメソッドを定義することができます。

3.スパース配列

  疎な配列の長さのプロパティは、配列内の要素の数よりも大きいです。あなたは、直接コンストラクタでまばらな配列を作成することができます。

let arr = new Array(5) //创建一个length值为5,数组元素为0的元素

 コンストラクターに加えて、直接オブジェクトの量も疎なアレイを作成するために行うことができます。

let a = []
a[1000] = 0 //length为1001,但是只有一个元素

 上記2つの従来の方法は、加えて、あなたもまばらな配列を生成するには、delete演算子を使用することができます。しかし、ここで多くの導入。スパース配列の作成には以下の2つのケースに注意すること。

let arr1 = [,,,] // [undefined,undefined,undefined]
let arr2 = new Array(3) // 该数组没有任何元素
0 in arr1 //true
0 in arr2 //false

4.配列の長さ

  各アレイは、長さ特性を有し、このプロパティは、通常のJavaScriptオブジェクトと異なっています。配列のlengthプロパティはサポート手動設定です。

  あなたは、配列のlengthプロパティを設定した場合、現在の長さよりも大きい場合、それは尾部に空の領域を作成します。

  あなたは、配列の長さプロパティを設定した場合、彼はより大きい又はアレイから除去率nの要素に等しくなるように、その現在の長さよりも小さくなっています。インデックス値が配列要素値の長さよりも大きい場合には、長さが最大の配列指標値であり、彼はそれに索引付けされないということであるように、それを理解することができる「削除します」。

  配列を変更するための長さの値は、いくつかの予期せぬ事態が生成されますので、私たちはObject.defineProperty()は、配列の長さになり、読み取り専用属性を可能に使用することができます。

let arr = [1,2]
Object.defineProperty(arr,'length',{writable:false})

5.アレイの一般的方法

  のは、最初のリストを見てみましょう、記事の冒頭では、私が述べたように、最大​​の違いは、Array.prototypeを継承し、その配列やオブジェクト、配列をある、とのObject.prototype、Arrayオブジェクトから継承された多くの操作機能の配列から継承されたオブジェクトいくつかの一般的に使用される機能は、特定の使用方法を見つけることができますし、各関数のパラメータは、後述します。

<-- 数组元素的添加 -->
arr.push(val)   //在数组的尾部添加一个值,返回该元素,并修改数组本身
arr.unshift(val)  //在数组的头部添加一个值,返回该元素,并修改数组本身
arr.splice(1,0,2) //第一个参数指定了插入(删除)元素的起始位置,第二个参数指定了个数
//第二个之后的参数数量为任意个,指定了需要插入到数组中的元素

<-- 数组元素的删除 -->
arr.pop() //删除数组的最后一个元素,返回该元素,并修改数组本身
arr.shift() //删除数组头部的元素,返回该元素,并修改数组本身
arr.splice(1,2) //表示删除元素的从第‘1’个开始,到第‘2’个结束,也就是删除了第二个和第三个元素
arr.slice(2,3) //两个参数指截取数组开始和结束的字段,
//如果第二个值是负整数,则代表倒数第几个元素,如果第二个值缺省,则代表到最后一个元素
//该方法返回截取的片段,并且不会修改调用的数组

<-- 数组元素的排序 -->
arr.sort((a,b)=>{return (a-b)}) //默认按字母表顺序排,a-b从小到大排,b-a从大到小

<-- 数组元素的遍历 -->
arr.forEach((item)=>{}) //该方法会自动过滤掉空值
arr.map((item)=>{return item+1}) //该方法会返回一个新的数组,并不会修改原数组
arr.fiter((item)=>{return item!==1})//该方法会返回一个索引值符合回调函数判断的新数组

<-- 数组元素的逻辑判定 --> 
arr.every((item)=>{return item===1})//判定数组中的每个元素是否符合回调函数里的判断,返回一个布尔值,遇到false就终止循环
arr.some((item)=>{return item===1})//判定数组中是否有元素符合回调函数里的判断,返回一个布尔值,遇到true就终止循环

<-- 连接两个数组 -->
arr.concat([1,2,3]) //该方法返回一个新数组,对原数组没有影响,所以需要一个新的数组接收值

<-- 数组转字符串 -->
arr.join('/') //括号内指定元素之间的分隔符,默认是逗号,该方法是String.split()的逆向操作

<-- 数组元素倒序 -->
arr.reverse() //该方法把数组中的元素颠倒,如果面试考这个,可以直接写

<-- 数组元素的组合 -->
arr.reduce((total,current)=>{
    return total+current
},0)
//reduce本意是缩小,减少,却经常被拿来做加法运算,后面我会详细介绍这个方法

<-- 数组元素的查询 -->
arr.find((item)=>{return item===1}) //查找到第一个符合条件的值,并返回该值
arr.indexOf((item)=>{return item===1}) //查找到第一个符合条件的值,并返回索引值

  

109元記事公開 ウォンの賞賛196 ビューに30万+を

おすすめ

転載: blog.csdn.net/dkr380205984/article/details/99844622