jQuery remove object from object collection

13,862

Solution 1

Review

First of all, it's very non-obvious what your code is supposed to do, but here are some issues:

jQuery.QuickTest = {
    $TestList: {},
    build: function()
    {
        $TestList={};

You define jQuery.QuickTest.$TestList, but inside build() you declare a global object $TestList.

Functions declared under jQuery.fn are supposed to act on a matched set of elements (referenced by this) and return it as well; your function does neither.

Answers

An answer to some of your questions:

  1. .remove() is a jQuery function that removes nodes from the DOM and needs to be called on a jQuery object.

  2. .splice() only applies to Array and even though you're accessing $TestList as if it were one, it's still just an Object.

  3. .delete() is not any function I know ;-)

Possible solution

To delete an entry from $TestList you could use the delete in this fashion:

delete $TestList[1];

Solution 2

use delete myObject, not myObject.delete

Share:
13,862
Richard Whitehouse
Author by

Richard Whitehouse

Updated on July 22, 2022

Comments

  • Richard Whitehouse
    Richard Whitehouse almost 2 years

    I have the following example code, creating a object collection.

    How can I remove one of the objects? (e.g. $TestList would look as though the "delete me" item was never there. I've tried .remove, .splice, .delete etc but I'm told it's not a function.

    Doing typeof($TestList) brings back object, and typeof($TestList[0]) also seems valid.

    Surely I don't have to recreate the collection without one item?

    (function($) { 
    
    jQuery.QuickTest = {
        $TestList: {},
        build: function()
        {
            $TestList={};
            $TestList[0] = 
            {
                title: "part 1"
            };
    
            $TestList[1] = 
            {
                title: "delete me please"
            };
    
            $TestList[2] = 
            {
                title: "part 2"
            };
    
        }
    }
    
    jQuery.fn.QuickTest = jQuery.QuickTest.build;   
    
    })(jQuery);
    
    $(document).ready(function() {
    
    $().QuickTest(
    {
    })
    });
    

    We're using jQuery 1.3.

    Thanks!

  • Michiel
    Michiel almost 11 years
    By the way this is just javascript and will work without jQuery
  • Richard Whitehouse
    Richard Whitehouse almost 11 years
    Excellent thanks very much! It is a completely cut down version of my code with only the absolute basics so yes, it is a bit open so sorry about that. But your explanation has given me lots to look at, so thanks very much! Quite difficult these days finding what you are trying to do when you don't really know the words to use. It was my way of doing an object available to all my other functions without having to pass it everywhere. and delete is exactly what I needed. :-)
  • Fizzix
    Fizzix over 9 years
    Will not remove the object completely. Instead, it will leave it as null.