2017-01-26 3 views
1

ネストされた配列からオブジェクトを移動して親配列に移動する簡単な方法を探しています。 moveItem()関数を使用しようとするとわかるように、私は "スプライスは関数ではありません"ということを続けています。私はこれを書き直す方法がわからないので、これを実行することさえ許可されていれば動作します。どんな助けもありがとうございます。要するに、アイテム[0] .contains []からアイテム[]にオブジェクトを移動しようとしています。配列内のネストされたオブジェクトをスプライス

var items = [{ 
 
    itemIndex: 0, 
 
    name: "a box of matches", 
 
    examine: "The box is old and damp,you find a single match inside.", 
 
    location: 0, // if location === 1000, items is in inventory. 
 
    contains: [{ 
 
    itemIndex: 1, 
 
    name: "a match", 
 
    examine: "A single match.", 
 
    location: 0, 
 
    contains: [], 
 
    hidden: true, 
 
    collectable: true, 
 
    useWith: 2, 
 
    useWithFail: 0, 
 
    useWithFailResponse: "the box is too damp to light the match", 
 
    useWithSuccessResponse: null 
 
    }], // Contain items inside items using array. 
 
    hidden: false, // if hidden, item cannot show up in invetory or room inventory 
 
    collectable: true, 
 
    useWith: null, // Item that this item can be successfully used with - index or null 
 
    useWithFail: 1, // Use with item that fails but has it's own unique fail message - index or null 
 
    useWithFailResponse: "the box is too damp to light the match", 
 
    useWithSuccessResponse: null 
 
}, { 
 
    itemIndex: 2, 
 
    name: "a closed cupboard", 
 
    examine: "You find a kitchen knife inside", 
 
    location: 4, 
 
    contains: [], 
 
    hidden: false, 
 
    collectable: false, 
 
    useWith: null, 
 
    useWithFail: null, 
 
    useWithFailResponse: null, 
 
    useWithSuccessResponse: "The match spaks into life!" 
 
}, { 
 
    itemIndex: 3, 
 
    name: "a kitchen knife", 
 
    examine: "It is old and rusty.", 
 
    location: 4, 
 
    contains: [], 
 
    hidden: true, 
 
    collectable: true, 
 
    useWith: 1, 
 
    useWithFail: null, 
 
    useWithFailResponse: null, 
 
    useWithSuccessResponse: "The match sparks into life!" 
 
}, ]; 
 

 
function moveItem() { 
 
    items.push(items[0].contains[0].splice(0, 1)); 
 
}

+2

[0]、それは対象配列のされていない含まれています。代わりに 'contains.splice(0,1)'を使うべきです – alebianco

+0

'items [0] .contains.splice(0,1)'ではないはずです – Rajesh

答えて

1

Array.prototype.splice()戻り

削除された要素を含む配列。以下のアプローチを使用親レベルまでネストされた配列から特定のオブジェクトを移動する

items.push(items[0].contains.splice(0, 1)[0]); 
関連する問題