再読「JavaScriptのデータ構造とアルゴリズムを学ぶ - 第三版は、」 - 第3章の配列(A)

詩を考えます

大将生来胆气豪,腰横秋水雁翎刀。
风吹鼍鼓山河动,电闪旌旗日月高。
天上麒麟原有种,穴中蝼蚁岂能逃。
太平待诏归来日,朕与先生解战袍。

ここで拍手があるはずです...

序文

新機能モード、共通のメソッドおよびES6の配列を作成する概念: - 「学習JavaScriptのデータ構造とアルゴリズム」読む第3章配列を、このセクションでは、配列の知識を共有するための小さなパートナーを提供します。

配列

メモリアレイは、同じデータ型の値の系列を格納するための最も簡単なデータ構造です。

注意:ストレージアレイは、値の異なるタイプをサポートするために、ベストプラクティスに準拠することを推奨しているが。

まず、アレイベース

配列を作成し、初期化します

  1. 新しい配列()

    // 空数组
    let heros = new Array()
    // 指定长度的数组 - 默认每个索引位置的值为undefined
    heros = new Array(7)
    // 直接将数组元素以参数的形式传入数组构造器
    heros = new Array('钟馗', '张良', '虞姬', '亚瑟', '荆轲')
  2. リテラル構文:[]

    let heros = ['鲁班', '吕布', '王昭君', '蔡文姬', '孙悟空']

    推奨使用[]配列定義

配列インデックス

  • 配列インデックスを順次蓄積、0から始まります。
  • 長さ1の配列の最大の配列インデックス。
  • 各値は、配列の配列インデックスに対応します。

添字または指標はまた結合を呼ぶことができます

配列の長さ

配列要素の.LENGTH特性利用可能な長さ

let heros = ['鲁班', '吕布', '王昭君', '蔡文姬', '孙悟空']
console.log('数组students的长度为:' + heros.length)

値の配列

使用する数组名[索引]値の配列を取得するためにフォームを

let heros = ['凯', '兰陵王', '瑶', '云中君', '典韦']
console.log('第一位英雄:' + heros[0]) // 凯

反復配列

ここでは、背の高い上の用語を使用し迭代、低キーを拒否し、遍历なぜ私に聞かないでください!

私たちは最も単純なループ構造を選択することができ、配列の反復

for (let i = 0; i < heros.length; i++) {
  console.log(heros[i])
}

共通のインタビューの質問:フィボナッチ数

フィボナッチ数の概念:第1項は第2項が1、スタートから第三に、最初の二つの合計値である、1であり、
1、1、2、3、5、8、13のよう...

// 求斐波那契数列前20个数
let fibonacci = []
fibonacci[0] = 1
fibonacci[1] = 1

for (let i = 2; i < 20; i++) {
  fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2]
}

// 输出
console.log(fibonacci)

第二に、配列要素が動作します

要素を追加します

要素を追加するには、配列の終わり

  1. 値とすることができる配列の最後の要素にスロットが割り当てられます

    let heros = ['猪八戒', '嫦娥', '孙策']
    heros[heros.length] = ['苏烈']
  2. pushメソッドを使用して

    heros.push('黄忠')
    console.log(heros) // [ '猪八戒', '嫦娥', '孙策', '黄忠' ]

配列の挿入要素の始まり

  1. 配列の先頭に挿入されたカスタム実装要素の方法

    論理的思考を達成するために:配列の先頭に要素を挿入するために、あなたは配列の最初の要素の位置を空にする必要があり、すべての要素が正しいものに移動します

    Array.prototype.insertFirstPosition = function (value) {
      for (let i = this.length; i >= 0; i--) {
        this[i] = this[i - 1]
      }
      this[0] = value
    }
    heros.insertFirstPosition('周瑜')
    console.log(heros) // [ '周瑜', '猪八戒', '嫦娥', '孙策', '黄忠' ]
  2. アンシフトメソッドを使用します

    heros.unshift('元歌')

    このアプローチの背後にあるInsertFirstPosition行動の論理と方法は同じです。

    常见面试问题:

    質問:挿入操作を行いながらストアは、データの大規模な配列が存在する場合、値がどうなるかを指定した場所に挿入されていますか?

    :挿入値の現在位置から開始し、すべての配列要素の後ろに右のいずれかに移動させます。

    フォローアップ:パフォーマンスが良いのでしょうか?

    A:確かにそれは良いではありません!配列が1000個の要素が含まれ、要素を挿入、要素1000は、配列インデックス0に移動する必要があり、パフォーマンスが良くありませんでした

    フォローアップ:どのようにそれを最適化するために?

    :JSリンクリスト構造は---それはリスト構造をリンクするものである、...記事は国民の関心ヨ番号を続け見ます

要素を削除します

配列要素の端を削除

heros.pop()

削除された配列要素の始まり

heros.shift()

任意の位置に要素を追加または削除 - スプライス

// array.splice(index[, number][, newValue1][, newValue2...])
// 从指定索引位置开始,执行删除相应数量的元素,并添加执行的元素
let heros = ['周瑜', '猪八戒', '嫦娥', '孙策', '黄忠']
heros.splice(2, 1, '孙悟空')
console.log(heros) //  [ '周瑜', '猪八戒', '孙悟空', '孙策', '黄忠' ]

二次元配列と多次元配列

// 二维数组
let heros = [
  ['甄姬', '女娲', '安琪拉', '貂蝉'],
  ['典韦', '亚瑟', '曹操', '夏侯惇']
]

// 二维数组取值
console.log(heros[0][1]) // 女娲

// 多维数组
heros = [
  [
    ['甄姬', '安琪拉']
  ],
  [
    ['操作', '夏侯惇']
  ]
]
// 多维数组取值
console.log(heros[0][0][1]) // 安琪拉

それは、いくつかの次元の配列であるかどうか、同じような値にインデックスをたどります

第三に、一般的な方法の配列

JSでは、オブジェクトの配列に対する改良です。これは、各配列が利用可能な方法の数を作成したことを意味します。

メソッドのコアリスト

方法 説明
連結 2つの以上のアレイ、リターン結果を接続します
すべての 各要素は、動作は、配列の各要素にtrueを返した場合、この関数が与えられると、この関数は真を返します
フィルタ 所定の関数に配列の各要素の操作は、関数は真を返し、要素が配列を返します
forEachの 所定の関数に配列の各要素の操作は、このメソッドは値を返しません
加わります 文字列にすべての配列要素
の指標 指定されたパラメータの配列要素に第一と同等のインデックスを返し、見つかりません-1
lastIndexOf 最大値の与えられたパラメータと等しい要素を検索するための配列のインデックスを返します。
地図 各関数コールの組成物の結果を返す配列関数の特定の操作のための配列の各要素
配列内の要素の順序を逆に、逆
減らします アキュムレータ、最終的に算出した戻り値としての機能を受け取ります
スライス インデックス範囲内の配列に対応する、インデックス値を渡すことは、新しい配列として返されます
一部 要素のいずれかが、操作は配列の各要素にtrueを返した場合に所定の機能は、真を返します
ソート アルファベット順の関数として着信ソート方法指定されたパラメータをサポート
文字列の配列として返されます
そして、文字列の配列として同様のtoString、

配列のマージ

concatメソッドは、配列、オブジェクト、または素子アレイのアレイに渡すことができるために、渡されたパラメータによって指定された接続方法に従ってアレイであります

let hz = '黄忠'
let partOfHeros = ['孙悟空', '孙斌', '李白']
let heros = ['钟馗']
let herosList = heros.concat(hz, partOfHeros)
console.log(heroList) // [ '钟馗', '黄忠', '孙悟空', '孙斌', '李白' ]

イテレータ機能

私は言わなければならない迭代言っていない、遍历なぜ私に聞かないでください、!

すべての

すべての反復するfalseを返すまで、配列内の各要素

// 判断数组中是否全部是偶数
let arr = [1, 2, 3, 4]
let res = arr.every(v => v % 2 === 0)
conso.e.log(res) // false

一部

配列の各要素は、それがtrueを返すまで、いくつかの繰り返し処理

// 判断数组中是否有偶数
let arr = [1, 2, 3]
let res = arr.some(v => v % 2 === 0)
console.log(res) // true

forEachの

配列反復の各要素

let arr = ['张良', '姜子牙', '露娜', '凯']

地図

各要素について、反復をマッピングするアレイの各要素は、それぞれの結果を返す指定されたメソッドを実行します

// 计算数组元素的乘方结果
let arr = [1, 2, 3]
let newArr = arr.map(v => v ** 2)
console.log(newArr) // [ 1, 4, 9 ]

フィルタ

フィルタの反復配列の各要素は、所定の方法を実行する各要素について、新たな配列は、真の要素に復帰によって返されます

// 返回数组中所有的女性英雄
let heros = [
  {
    name: '甄姬',
    sex: '女'
  },
  {
    name: '亚瑟',
    sex: '男'
  },
  {
    name: '貂蝉',
    sex: '女'
  }
]
let nvHeros = heros.filter(hero => hero.sex === '女')
console.log(nvHeros) // [ { name: '甄姬', sex: '女' }, { name: '貂蝉', sex: '女' } ]

減らします

アキュムレータとしての機能を受信し、算出された値を返します

// 计算数组元素的和
let arr = [1, 2, 3, 4, 5, 6]
let sum = arr.reduce((previous, current) => previous + current)
console.log(sum) // 21

共通のインタビューの質問 - 文字列をリバース

文字列abcdefを出力fedcba

  1. ループステッチのための逆を使用してください

    let str = 'abcdef'
    let newStr = ''
    for (let i = str.length - 1; i >= 0; i--) {
      newStr += str[i]
    }
    console.log(newStr) // fedcba
  2. これは、配列関数を意味しreversejoin文字列関数をsplit

    let str = 'abcdef'
    let newStr = str.split('').reverse().join('')
    console.log(newStr) // fedcba

    追伸

    そして、胡兄弟、今日は小さなパートナーが覚えているように、コンテンツを共有すること收藏、および转发右下のボタンをクリックして在看、それをお勧めするよりジュニアパートナーヨ、メッセージ交換の多くに歓迎...

胡弟の何かが、スキル、胡弟の気持ちを言うために!Jingdongはオープンプラットフォームのチーフフロントエンド包囲ライオン。あなたと話ビッグフロントエンド、フロントエンド共有システムアーキテクチャフレームワークの実装原則、最新かつ最も効率的な技術の練習!

押しスキャンコード懸念し、よりハンサム、より美しくヨ!いいえ世間の注目胡兄弟何かが胡兄ヨとの深い交流を続けることができ、言わないように!

胡兄弟何かを言うために

おすすめ

転載: blog.51cto.com/13482114/2429504