1. ホーム
  2. knockout.js

[解決済み] 観測可能な配列の中の項目を条件付きでプッシュするには?

2022-11-16 17:27:45

質問

私は push に新しい項目を追加したい。 observableArray の上に新しいアイテムを追加したいのですが、そのアイテムがまだ存在しない場合のみです。KnockoutJSでこれを実現するためのquot;find"関数や推奨されるパターンはあるのでしょうか?

私は remove 関数が observableArray は、条件を渡すための関数を受け取ることができます。私はほとんど同じ機能が欲しいのですが、渡された条件が真であるか真でない場合にのみそれをプッシュするようにします。

どのように解決するのですか?

observableArrayは indexOf 関数(のラッパー)を公開します。 ko.utils.arrayIndexOf ). これにより、以下のことが可能になります。

if (myObservableArray.indexOf(itemToAdd) < 0) {
  myObservableArray.push(itemToAdd);
}

もし両者が実際には同じオブジェクトへの参照ではなく、カスタムの比較ロジックを実行したい場合は ko.utils.arrayFirst のようにします。

var match = ko.utils.arrayFirst(myObservableArray(), function(item) {
    return itemToAdd.id === item.id;
});

if (!match) {
  myObservableArray.push(itemToAdd);
}