1. ホーム
  2. javascript

[解決済み】JavascriptのTypeError。未定義のプロパティ 'indexOf' を読み取ることができません。

2022-02-11 05:36:06

質問

このコードでは、ある要素を cart_products の配列になります。

var cart_products = ["17^1", "19^1", "18^1"];
var product = 17;

$.each(cart_products,function(key, item) {
    if(item.indexOf(product+"^") !== -1){
        cart_products.splice(key, 1);
    }
});

しかし、Google Chromeのコンソールでこのようなエラーが表示されます。

Uncaught TypeError: 未定義のプロパティ 'indexOf' を読み取ることができません。

コードに何か問題があるのでしょうか?

よろしくお願いします。

解決方法は?

問題は、あなたが モディファイ の配列は、jQuery の $.each がループしているため、最後に到達したときにはインデックス 2 にあったエントリはもう存在しません。 (正直なところ、私は少し驚いています $.each がそのような振る舞いをするのですが、私はまだ $.each は、少なくとも5年以上前のことなので...)

配列からマッチを取り除くことが目的であれば、より良い選択肢は filter :

var cart_products = ["17^1", "19^1", "18^1"];
var product = 17;

cart_products = cart_products.filter(function(item) {
    return item.indexOf(product+"^") === -1;
});
console.log(cart_products);

...あるいは、新しい配列を作成するのではなく、その場で配列を変更することが重要な場合は、退屈な for ループ アンドレアスが指摘するように ルーピング バックワード を削除しても問題ないようにします。

var cart_products = ["17^1", "19^1", "18^1"];
var product = 17;

var target = product + "^";
for (var index = cart_products.length - 1; index >= 0; --index) {
  if (cart_products[index].indexOf(target) !== -1) {
    cart_products.splice(index, 1);
  }
}
console.log(cart_products);