2017-05-31 11 views
0

配列に値がすでに存在するかどうかに基づいて配列に値を追加したり削除したりする方法を探しています。私は選択ボックス、顧客名と注文IDを含む注文テーブルを設定しており、顧客名に基づいてこの配列を構築しようとしています。Javascript配列から特定の値を追加/削除する

Order Table 
----------- 
Select Customer Order_ID 
------------------------------ 
[X]  Joe  1 
[X]  Joe  2 
[]   Mark  3 
[]   Mark  4 
[X]  Mark  5 

私は、選択した顧客名をテーブルにプッシュするCustomer配列を作成しています。上記の場合には選択した名前がすでに配列に存在する場合は、今言った名前を無視し、その配列が表示されるはずです....

//this 
customerArray["Joe", "Mark"] 

//not this 
customerArray["Joe", "Joe", "Mark"] 

しかし、それがされるまで、アレイからの顧客の名前を削除しないでください前記配列内に顧客名を含む選択されたレコードは存在しない。

Order Table 
----------- 
Select Customer Order_ID 
------------------------------ 
[X]  Joe  1 
[]   Joe  2 
[]   Mark  3 
[]   Mark  4 
[X]  Mark  5 

これはまだ私は名前の重複を処理する方法を混同しそうだが...

Order Table 
----------- 
Select Customer Order_ID 
------------------------------ 
[]   Joe  1 
[]   Joe  2 
[]   Mark  3 
[]   Mark  4 
[X]  Mark  5 

これは

customerArray["Mark"] 

でなければなりません

customerArray["Joe", "Mark"] 

を持つべきです前記のn ameは選択されなくなりました。どんな助けでも大歓迎です。

+0

?何かエラーがありますか?もっと情報が必要です。 –

答えて

1

単純ではあるが効率的ではない解決策は、要素を追加する前に、配列に既に存在するかどうかを確認することです。そうでない場合は、意図したとおりに追加してください。

const array = []; 
 

 
function add(element, arr) { 
 
    if (!arr.includes(element)) { // make sure element doesn't already exist before you add it 
 
    arr.push(element); 
 
    } 
 
} 
 

 
add("John", array); 
 
add("John", array); 
 
add("Mark", array); 
 
add("Mark", array); 
 
add("Mark", array); 
 

 
console.log(
 
    array // ["John", "Mark"] 
 
);

除去は、同様の方法で行わなければなりません。削除する前に、削除するものがあるかどうかを確認する必要があります。

const array = ["John"]; 
 

 
function remove(element, arr) { 
 
    let idx = arr.indexOf(element); 
 
    if (idx !== -1) { // make sure element exists before removing it 
 
    arr.splice(idx, 1); 
 
    } 
 
} 
 

 
remove("Mark", array); // does nothing 
 

 
console.log(
 
    array // ["John"] 
 
); 
 

 
remove("John", array); // removes John 
 

 
console.log(
 
    array // [] 
 
);

このユースケース用クリーナーアプローチはSetでユニークな値を保持するように意図されたデータ構造を使用することです。

const set = new Set(); 
 

 
set.add("John"); 
 
set.add("John"); 
 
set.add("Mark"); 
 
set.add("Mark"); 
 
set.add("Mark"); 
 

 
console.log(
 
    [...set.values()] // ["John", "Mark"] 
 
);

セットから除去は、非常に簡単であり、フードの下の詳細を扱います。あなたがこれまでに試してみました何

const set = new Set(["John"]); 
 

 
set.delete("Mark"); // does nothing 
 

 
console.log(
 
    [...set.values()] // ["John"] 
 
); 
 

 
set.delete("John"); // removes "John" 
 

 
console.log(
 
    [...set.values()] // [] 
 
);

関連する問題