2157

I've got an array:

myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}, etc.] 

I'm unable to change the structure of the array. I'm being passed an id of 45, and I want to get 'bar' for that object in the array.

How do I do this in JavaScript or using jQuery?

0

    37 Answers 37

    3

    This solution may helpful as well:

    Array.prototype.grep = function (key, value) { var that = this, ret = []; this.forEach(function (elem, index) { if (elem[key] === value) { ret.push(that[index]); } }); return ret.length < 2 ? ret[0] : ret; }; var bar = myArray.grep("id","45"); 

    I made it just like $.grep and if one object is find out, function will return the object, rather than an array.

    2
    • 2
      Don't modify objects you don't own.CommentedFeb 14, 2016 at 21:15
    • @Gothdo I Agree. If someone didn't know function will return the object, rather than an array may get a mistake, but I think it depends on users.
      – soytian
      CommentedFeb 15, 2016 at 3:55
    1

    Starting from aggaton's answer, this is a function that actually returns the wanted element (or null if not found), given the array and a callback function that returns a truthy value for the "correct" element:

    function findElement(array, callback) { var elem; return array.some(function(e) { if (callback(e)) { elem = e; return true; } }) ? elem : null; }); 

    Just remember that this doesn't natively work on IE8-, as it doesn't support some. A polyfill can be provided, alternatively there's always the classic for loop:

    function findElement(array, callback) { for (var i = 0; i < array.length; i++) if (callback(array[i])) return array[i]; return null; }); 

    It's actually faster and more compact. But if you don't want to reinvent the wheel, I suggest using an utility library like underscore or lodash.

      0

      Shortest,

      var theAnswerObj = _.findWhere(array, {id : 42}); 
      2
      • 2
        This requires using the underscore library, the OP asked for a plain javascript or jQuery solutionCommentedFeb 22, 2015 at 14:36
      • 4
        once you include underscore, this is not a short answer!CommentedApr 17, 2015 at 18:02
      0

      The below code will help you to search values from nested objects also in your data.

      const updatedData = myArrayOfObjects.filter((obj: any) => Object.values(obj).some((val: any) => { if (typeof (val) == typeof ("str")) { return val.toString().includes(Search) } else { return Object.values(val).some((newval: any) => { if (newval !== null) { return newval.toString().includes(Search) } }) } })) 
        -2

        Consider "axesOptions" to be array of objects with an object format being {:field_type => 2, :fields => [1,3,4]}

        function getFieldOptions(axesOptions,choice){ var fields=[] axesOptions.each(function(item){ if(item.field_type == choice) fields= hashToArray(item.fields) }); return fields; } 
          -4

          My way to find index of array:

          index = myArray.map((i) => i.id).indexOf(value_of_id); item = myArray[index]; 
            -7

            Use the filter method of jQuery:

             $(myArray).filter(function() { return this.id == desiredId; }).first(); 

            That will return the first element with the specified Id.

            It also has the benefit of a nice C# LINQ looking format.

            1
            • 5
              The filter method is intended for elements, not arrays. Use the grep method instead.
              – Guffa
              CommentedSep 9, 2011 at 15:56

            Start asking to get answers

            Find the answer to your question by asking.

            Ask question

            Explore related questions

            See similar questions with these tags.