2017-04-10 6 views
0

ありがとうございます。私は私のコードに関して混乱しています。私はさまざまなバリエーションを試みましたが、obsの配列から単一のキーを削除することはできません。例:配列内の特定のキーを削除する

var cart = []; 
var obj = {}; 
var newObj = {}; 

obj["mcdonald"] = "food" 
obj["starbucks"] = "coffee" 
newObj["new"] = "books" 
newObj["old"] = "books" 

cart.push(obj); 
cart.push(newObj) 

ここで、単一のキーだけを削除します。たとえば、オブジェクト全体ではなく、newObjオブジェクトからの値 "books"を持つ "new"キーだけを考えてみましょう。一度に1つのキーの代わりにオブジェクト全体が削除されます。誰かが私に何が欠けているか、どこに間違っているか教えてください。これは私が取り組んでいる宿題です。私はパラメータに配置する項目を削除する必要があるため、テストに合格したことに気づきましたが、正しい方法で学習できるようにしたいと考えています。意味、オブジェクト全体ではなく単一のキーを移動する。

function removeFromCart(itemName){ 
for(var newArr in cart){ 
    if (cart.hasOwnProperty(newArr)) { 
    var item = Object.keys(cart[newArr])[0] 
    if (item === itemName) { 
    var index = cart.indexOf(itemName) 
    cart.splice(index, 1) 
    } else { 
    alert('That item is not in your cart.') 
    } 
    } 
} 
return cart 
} 
+1

'カート[itemName]'を削除しませんか? – apokryfos

+0

@apokryfosそのようにすればテストに合格していないようです。私はvar indexとcart.splice(index、1)を削除しました。何も削除されていないので、テストは失敗しました。 –

答えて

0

これをよりよく理解するために、私は例のデータ構造を作成するつもりです:私は、キー==「新」でアイテムを削除したい場合は

var cart = [ 
    { "mcdonald": "food", "starbucks": "coffee" }, // obj 
    { "new": "book", "old": "book" } // newObj 
]; 

はだから今、それはするのは簡単です配列内のすべてのオブジェクトを繰り返し処理し、探しているものと一致するキーをすべて削除する必要があることを確認してください。

function removeItem(itemKey) { 
    cart.forEach(function(obj) { 
    delete obj[itemKey]; 
    return obj; 
    }); 
} 

純粋な関数を書くことをお勧めします。これは、(コーディングの意図)とデバッグを理解するのに役立ちます。

関連する問題