简体   繁体   中英

Splice nested object in array

I'm trying to find a simple way to move an object from a nested array and move it to its parent array. I keep getting "splice is not a function," as you can see if you try to use the 'moveItem()' function. I don't know how to re-write this so it works, if it's even allowed to do things this one. Any help is appreciated. In short, I'm trying to move the object from items[0].contains[] to items[] Hope that makes sense.

 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)); } 

Array.prototype.splice() returns

An array containing the deleted elements.

To move a certain object from nested array up to the parent level use the following approach:

items.push(items[0].contains.splice(0, 1)[0]);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM