1

I have a data structure that looks like this

var foo = [
    {
        bar: {
            something: 123
        },
        baz: {
            somethingElse: 321
        }
    },
    {
        bar: {
            something: 444
        },
        baz: {
            somethingElse: 555
        }
    }
];

I then have a variable:

var findMe = 444;

I'd like to search through my foo data structure (an array of objects) to see if findMe matches the bar.something property of any of the objects inside the foo array.

Using underscore.js, I would have thought the following code snippet would do the trick:

var _ = require('underscore');
var thingImLookingFor = _.findWhere(foo, {bar.something: findMe});

However that produces a syntax error in my application:

Uncaught SyntaxError: Unexpected token .

Is anyone able to shed some light on how I can achieve the search I'm looking for?

Thanks!

Dave Cooper
  • 10,494
  • 4
  • 30
  • 50
  • 1
    you'll need to perform a deep find http://stackoverflow.com/questions/17578725/underscore-js-findwhere-nested-objects – YarGnawh Jan 04 '16 at 02:40
  • 1
    or you can try something with JSONPath http://goessner.net/articles/JsonPath/ – YarGnawh Jan 04 '16 at 02:42
  • @YarGnawh thanks for the responses :) Fortunately because it is certain exactly how deep the search is and exactly what keys need to be searched I can use find(). I'm not sure of the performance implications the approach has but from my benchmarks it looks fine :) – Dave Cooper Jan 04 '16 at 22:41

1 Answers1

1

Found out the solution to my question.

_.find() does what I want quite nicely.

_.find(foo, function(obj) {
    return obj.bar.something == findMe;
});
Dave Cooper
  • 10,494
  • 4
  • 30
  • 50