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
allo
  • 3,955
  • 8
  • 40
  • 71
KitKit
  • 8,549
  • 12
  • 56
  • 82
  • Possible duplicate of [How to determine if Javascript array contains an object with an attribute that equals a given value?](https://stackoverflow.com/questions/8217419/how-to-determine-if-javascript-array-contains-an-object-with-an-attribute-that-e) – Elmer Dantas Nov 27 '17 at 08:25

6 Answers6

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);
Suren Srapyan
  • 66,568
  • 14
  • 114
  • 112
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);
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392
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

Anik Islam Abhi
  • 25,137
  • 8
  • 58
  • 80
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);
Znaneswar
  • 3,329
  • 2
  • 16
  • 24
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.

Derek 朕會功夫
  • 92,235
  • 44
  • 185
  • 247
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