ホームページ >ウェブフロントエンド >jsチュートリアル >js チュートリアル - 配列ループ削除エラーの実装と解決策

js チュートリアル - 配列ループ削除エラーの実装と解決策

php是最好的语言
php是最好的语言オリジナル
2018-08-06 15:59:072384ブラウズ

問題の説明

簡単な要件は、配列内の条件を満たさない要素を削除することです。

間違った実装

最初の実装である foreach ループが間違っていることが判明しました。 foreach循环,发现就是不对。

// 如果学科存在id
if (discipline.id) {
    // foreach类别
    angular.forEach(result, function(value, key) {
        // 如果该类别有对应学科(考虑到“请选择的情况下”会报从undefined上获取id)
        // 并且该学科类别id不等于传入学科id
        if (value.discipline && !angular.equals(value.discipline.id, discipline.id)) {
            // 移除不符合要求的元素
            result.splice(key, 1);
        }
    });
}

每次删除时,都是根据key进行删除的,但是删除之后,数组的长度就会发生变化,导致下次再根据key去删除,发现长度变了,我们想删除的元素的位置也变了。

解决方案

Java中,我们使用iterator

// 如果学科存在id
if (discipline.id) {
    /**
     * 数组过滤
     * 接收一个函数,根据该函数返回为true/false
     * 决定该元素保留还是删除
     */
    result = result.filter(function(value) {
        // 兼容请选择项,默认保留
        if (!value.discipline) {
            return true;
        }
        // 保留器具类别的学科id与当前学科id相同的项
        return angular.equals(value.discipline.id, discipline.id);
    });
}

削除するたびにkeyに基づいて削除されますが、削除後は配列の長さが変化するため、次はkeyに基づいて削除されますtime を確認すると、長さが変化し、削除したい要素の位置も変化していることがわかりました。


解決策

Java では、iterator メソッドを使用してイテレータ オブジェクトを取得し、それを変更します。 rrreee関連記事:

JavaScriptのforループで配列要素の内容を削除する際に起こる問題

🎜🎜🎜配列ループについての質問🎜🎜

以上がjs チュートリアル - 配列ループ削除エラーの実装と解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。