red
red

Reputation: 305

JavaScript. Filtering objects by multple properties

So, I have this simple dataset:

LIVE DEMO: http://jsbin.com/ramuwow/edit?js,console

var members = [{
    "id": "1",
    "firstName": "JOHN",
    "lastName": "MARTY"
}, {
    "id": "2",
    "firstName": "JONES",
    "lastName": "SMITH"
}, {
    "id": "3",
    "firstName": "MARY",
    "lastName": "DOE"
}, {
    "id": "4",
    "firstName": "MARGARET",
    "lastName": "KANE"
}];

and I have one piece of string from input to search for these objects.

I can do from name and last name to id. But I cannot do first AND last name.

Here is what i have so far:

var members = [{"id":"1","firstName":"JOHN","lastName":"MARTY"},{"id":"2","firstName":"JONES","lastName":"SMITH"},{"id":"3","firstName":"MARY","lastName":"DOE"},{"id":"4","firstName":"MARGARET","lastName":"KANE"}];

var filteredNames = members.filter(function(n){
    var query = "MARY DO";

    var splitUp = query.split(" ");
    console.log(splitUp);

    return n.firstName.indexOf(query) > -1 ? n : false || 
        n.lastName.indexOf(query) > -1 ? n : false || 
        n.id.indexOf(query) > -1 ? n : false || 
        n.firstName.indexOf(splitUp[0]) > -1 && n.lastName.indexOf(splitUp[1]);
});

console.log(filteredNames);

and that returns:

["MARY", "DO"]
["MARY", "DO"]
["MARY", "DO"]
["MARY", "DO"]
[]

What am I Doing wrong? The object of MARY DOE should appear.

Upvotes: 0

Views: 52

Answers (1)

Umair Shah
Umair Shah

Reputation: 2280

Problem : You are missing comparison to -1 at the last.

Solution : Compare the last to -1 and you will get your object as :

var members = [{"id":"1","firstName":"JOHN","lastName":"MARTY"},{"id":"2","firstName":"JONES","lastName":"SMITH"},{"id":"3","firstName":"MARY","lastName":"DOE"},{"id":"4","firstName":"MARGARET","lastName":"KANE"}];

var filteredNames = members.filter(function(n){
    var query = "MARY DO";

    var splitUp = query.split(" ");
    console.log(splitUp);

    return n.firstName.indexOf(query) > -1 ? n : false || 
        n.lastName.indexOf(query) > -1 ? n : false || 
        n.id.indexOf(query) > -1 ? n : false || 
        n.firstName.indexOf(splitUp[0]) > -1 && n.lastName.indexOf(splitUp[1]) > -1;
});

console.log(filteredNames);

OUTPUT :

["MARY", "DO"]
["MARY", "DO"]
["MARY", "DO"]
["MARY", "DO"]
[[object Object] {
  firstName: "MARY",
  id: "3",
  lastName: "DOE"
}]

@Credit Goes To @Pointy

JSBin Link : http://jsbin.com/geziwetudi/edit?js,console

Upvotes: 1

Related Questions