現在、angularのforEach()
- methodを使用して、オブジェクトの配列で新しい値を確認しています。しかし、リストには20個のオブジェクトがあるため、これは間違ったアプローチです。既存の記事を使用してオブジェクトを作成する場合、forEachのifステートメントは、記事が1回存在し、19回存在しないことを示します。
次のコード:
var list = [];
articlelist.forEach(function (val) {
list.Push(val.artNr);
});
$log.info(list);
articlelist
には、20個すべてのオブジェクトが含まれます。比較するために必要なのはartNr
のみです。ユーザーが新しい記事を作成するときは、追加されたartNrが既に存在するかどうかを確認するifステートメントである必要があるためです。
$scope.createItem = function (createItem) {
if(list.artNr === createItem.artNr) {
$scope.message = 'artNr already exists!';
}
...
};
問題は、list変数が配列であるため、list.artNrが「未定義」を返すことです。
コンソールでのリスト出力=>
Array ["AB001", "AB002", "AB003", "AB004"]
、createItemの出力:=>
Object { artNr: "AB001", description: "New Article" ...}
新しく作成されたオブジェクトをリスト変数の配列と比較するにはどうすればよいですか?
indexOf
関数を使用できます。
if(list.indexOf(createItem.artNr) !== -1) {
$scope.message = 'artNr already exists!';
}
IndexOfの詳細:
indexOf()を使用できます。好む:
var Color = ["blue", "black", "brown", "gold"];
var a = Color.indexOf("brown");
alert(a);
indexOf()メソッドは、指定されたアイテムの配列を検索し、その位置を返します。アイテムが見つからない場合は-1を返します。
端から端まで検索する場合は、lastIndexOf()メソッドを使用します。
var Color = ["blue", "black", "brown", "gold"];
var a = Color.lastIndexOf("brown");
alert(a);
検索は、指定された位置から開始します。開始位置が指定されていない場合は終了位置から開始し、配列の先頭で検索を終了します。
戻り値-1アイテムが見つからない場合。
Uはこのようなものを使用できます。
function (field,value) {
var newItemOrder= value;
// Make sure user hasnt already added this item
angular.forEach(arr, function(item) {
if (newItemOrder == item.value) {
arr.splice(arr.pop(item));
} });
submitFields.Push({"field":field,"value":value});
};