1

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

2
  • 2
    contains[0] is not an array, it's an object. you should contains.splice(0,1) instead Commented Jan 26, 2017 at 11:46
  • Should it not be items[0].contains.splice(0,1) Commented Jan 26, 2017 at 11:51

1 Answer 1

2

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]);
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.