3

I have a basic problem with Javascript. This code is below.

var users = [{"user":{"id":1,"username":"google"}},{"user":{"id":2,"username":"yahoo"}}] const result = users.filter(users.id === 1); console.log(result); 

I want to get result if user_id exist in array or not.

The error is:

false is not a function 
1

6 Answers 6

2

You need to take a callback, like an arrow function, with the right properties to the id, because you have a nested structure for every user.

var users = [{ user: { id: 1, username: "google" } }, { user: { id:2, username: "yahoo" } }]; const result = users.filter(user => user.user.id === 1); console.log(result);

1
  • Thank you for your help!
    – KitKit
    CommentedNov 27, 2017 at 8:27
2

You are writing the function in a wrong way

Try like this

const result = users.filter(x => x.user.id === 1); console.log(result); 

DEMO

1
  • Thank you for your help!
    – KitKit
    CommentedNov 27, 2017 at 8:28
2

You need to pass a callback to the function. This will return you the items which id is 1.

const users = [{"user":{"id":1,"username":"google"}},{"user":{"id":2,"username":"yahoo"}}] const result = users.filter(user => user.user.id === 1); console.log(result);

Also instead of checking the length, you can use some function. This will terminate check of the rest items if any item was found.

const users = [{"user":{"id":1,"username":"google"}},{"user":{"id":2,"username":"yahoo"}}] const result = users.some(user => user.user.id === 1); console.log(result);

2
  • Thank you for your help!
    – KitKit
    CommentedNov 27, 2017 at 8:27
  • This solution is best for me.!!
    – KitKit
    CommentedNov 27, 2017 at 8:29
1

You might want to use reduce instead:

var users = [{"user":{"id":1,"username":"google"}},{"user":{"id":2,"username":"yahoo"}}] const result = users.reduce((s, user) => s || user.user.id === 1, false); console.log(result);

.filter returns an array, while .reduce can return whatever you want (in this case, a boolean).

If you want to use .filter, try:

var users = [{"user":{"id":1,"username":"google"}},{"user":{"id":2,"username":"yahoo"}}] const result = !!users.filter(user => user.user.id === 1).length; console.log(result);

However, keep in mind that .filter will create an extra array and might not be as efficient as .reduce.

3
  • Thank you for your help!
    – KitKit
    CommentedNov 27, 2017 at 8:27
  • i will vote the best for your answer. Can you add solution with .filter return Boolean
    – KitKit
    CommentedNov 27, 2017 at 8:34
  • @FeedGit Sure. Added.CommentedNov 27, 2017 at 8:36
1

Try like this

var users = [{"user":{"id":1,"username":"google"}},{"user":{"id":2,"username":"yahoo"}}] const result = users[0].user.id; console.log(result);

1
  • Thank you for your help!
    – KitKit
    CommentedNov 27, 2017 at 8:27
0
var users = [{"user":{"id":1,"username":"google"}},{"user": {"id":2,"username":"yahoo"}}] const result = users.filter(function(el){ return (el.user.id===1) }); console.log(result[0].user.username); //This will print the username of the object with id==1 in array 

    Start asking to get answers

    Find the answer to your question by asking.

    Ask question

    Explore related questions

    See similar questions with these tags.