Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Searching for items in a JSON array Using Node (preferably without iteration)

Currently I get back a JSON response like this...

{items:[
  {itemId:1,isRight:0},
  {itemId:2,isRight:1},
  {itemId:3,isRight:0}
]}

I want to perform something like this (pseudo code)

var arrayFound = obj.items.Find({isRight:1})

This would then return

[{itemId:2,isRight:1}]

I know I can do this with a for each loop, however, I am trying to avoid this. This is currently server side on a Node.JS app.

like image 880
Jackie Avatar asked Aug 06 '12 21:08

Jackie


2 Answers

var arrayFound = obj.items.filter(function(item) {
    return item.isRight == 1;
});

Of course you could also write a function to find items by an object literal as a condition:

Array.prototype.myFind = function(obj) {
    return this.filter(function(item) {
        for (var prop in obj)
            if (!(prop in item) || obj[prop] !== item[prop])
                 return false;
        return true;
    });
};
// then use:
var arrayFound = obj.items.myFind({isRight:1});

Both functions make use of the native .filter() method on Arrays.

like image 101
Bergi Avatar answered Oct 14 '22 17:10

Bergi


Since Node implements the EcmaScript 5 specification, you can use Array#filter on obj.items.

like image 34
shinzer0 Avatar answered Oct 14 '22 17:10

shinzer0