js の二次カプセル化配列の使用の概要 (コード)

不言
リリース: 2018-07-25 10:01:50
オリジナル
1385 人が閲覧しました

この記事で共有する内容は、JS データ構造による配列の二次カプセル化に関するものです。次に、具体的な内容を見てみましょう。

1. 新しい myArray クラスを作成します

class myArray {
    
}
ログイン後にコピー

2. このクラスのコンストラクターを初期化します

/**
 * 初始化构造函数
 * @param capacity 容量
 */
constructor(capacity) {
    // 初始化arr变量
    this.arr = capacity === undefined ? [] : new Array(capacity);
    // 数组长度
    this.length = 0;
    // 数组容量
    this.capacity = capacity;
}
ログイン後にコピー

4. 要素を追加する配列メソッドを追加します

// 获取数组的长度
getLength() {
    return this.length;
}

// 获取数组的容量
getCapacity() {
    return this.arr.length;
}

// 判断数组是否为空
isEmpty() {
    return this.length === 0;
}
ログイン後にコピー

5.配列メソッド

/**
 * 在数组中在index插入一个新的元素e
 * @param index 索引
 * @param e 元素
 * 原理:
 * 首先在传进来index索引的位置向后面移动一位,
 * 然后把该index索引腾空出来放进传入的新的元素e,
 * 最后维护一下length,长度加1
 */
add(index, e) {

    if (this.length === this.arr.length) {
        throw new Error('Add failed. Array is full.')
    }

    if (index < 0 || index > this.length) {
        throw new Error('Add failed. Request index >= 0 and index <= length&#39;);
    }

    for (let i = this.length - 1; i >= index; i--) {
        this.arr[i + 1] = this.arr[i];
    }

    this.arr[index] = e;
    this.length++;
}


// 向数组首位添加一个新元素e
addFirst(e) {
    this.add(0, e)
}

// 向数组所有的元素后面添加一个新元素e
addLast(e) {
    this.add(this.length, e);
}
ログイン後にコピー

6. 配列メソッド

/**
 * 从数组中删除index位置的元素,返回删除的元素
 * @param index
 * @returns {*}
 * 原理:
 * 首先找到索引index的位置,
 * 然后把索引后面的元素都向前移动一位,其实是把索引后面的翻盖前面一位的元素
 * 最后维护一下length,减一
 *
 */
remove(index) {
    if (index < 0 || index >= this.length) {
        throw new Error('Remove failed. Request index >= 0 and index <= length');
    }

    let ret = this.arr[index];
    for (let i = index + 1; i < this.length; i++) {
        this.arr[i - 1] = this.arr[i];
    }
    this.length--;

    return ret;
}

// 从数组中删除第一个元素,返回删除的元素
removeFirst() {
    return this.remove(0)
}

// 从数组中删除最好个元素,返回删除的元素
removeLast() {
    return this.remove(this.length - 1)
}

// 从数组中删除元素e
removeElement(e) {
    let index = this.findIndex(e);
    if (index != -1) {
        this.remove(index);
    }
}
ログイン後にコピー

にクエリ要素を追加し要素メソッドを変更 7. 配列に含まれる検索メソッドを追加

// 获取index索引位置的元素
get(index) {
    if (index < 0 || index >= this.length) {
        throw new Error('Get failed. Index is illegal.');
    }
    return this.arr[index];
}

// 修改index索引的元素e
set(index, e) {
    if (index < 0 || index >= this.length) {
        throw new Error('Get failed. Index is illegal.');
    }
    this.arr[index] = e;
}
ログイン後にコピー

8. 配列をカプセル化するメソッドをテスト

// 查询数组是否包含e元素
contains(e) {
    for (let i = 0; i < this.length; i++) {
        if (this.arr[i] === e) {
            return true;
        }
    }
    return false;
}

// 查找数组中元素所在的所在的索引,如果不存在e,则返回-1
findIndex(e) {
    for (let i = 0; i < this.length; i++) {
        if (this.arr[i] === e) {
            return i;
        }
    }
    return -1;
}

// 把数组转换为字符串,并返回结果
toString() {
    let res = "";
    console.log(`Array: length = ${this.length}, capacity = ${this.capacity}.`);

    res += "[";
    for (let i = 0; i < this.length; i++) {
        res += this.arr[i];
        if (i !== this.length - 1) {
            res += ', '
        }
    }
    res += "]";

    return res.toString();
}
ログイン後にコピー

9. メソッドdescription

メソッドgetLength getCapacityisEmptyaddFirstaddLastadd removeremoveFirstremoveLastremoveElementtoString。 ()10. 完全なセカンダリのカプセル化配列コード
// 使用我们的类数组,声明一个容量为20的数组
let arr = new myArray(20);
// 首位增加数据
arr.addFirst('波波');
console.log(arr.toString());
// 输出:Array: length = 1, capacity = 20.
// 输出:[波波]

for (let i = 0; i < 10; i++) {
    arr.addLast(i)
}
console.log(arr.toString());
// 输出:Array: length = 11, capacity = 20.
// 输出:[波波, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

console.log(arr.findIndex(4)); // 5

// ...
ログイン後にコピー
JS モジュラー分析 (名前空間) JS 変数オブジェクトとは何ですか? JS変数オブジェクトと注意点を詳しく解説
Description Parameters パラメータの説明 Example
配列の長さを返す

getLength()
は配列の容量を返します

getCapacity()
配列が空かどうかを判断し、ブール値を返します

は空です()
配列の最初の要素に新しい要素を追加します e 新しい要素 addFirst(e)
配列内のすべての要素の後に新しい要素を追加します e New element addLast(e)
配列のインデックスに新しい要素を挿入します e index, e index Index, e new element add(index, e)
インデックス位置の要素を配列から削除し、deleteを返す要素 index index remove(index)
配列から最初の要素を削除し、削除された要素を返しますelement

removeFirst()
配列から最後の要素を削除し、削除された要素を返します

removeLast()
削除配列からの要素e removed要素e インデックスインデックスの要素を変更します index、e indexindex、eの新しく置き換えられた要素 set(index, e)
contains 配列にe要素が含まれているかどうかをクエリします e 含まれる要素をクエリする contains(e)
findIndex Find 配列内の要素 e のインデックス。e が存在しない場合は、クエリされた要素が返されます。
関連する推奨事項:

以上がjs の二次カプセル化配列の使用の概要 (コード)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート