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
-
Possible duplicate of How to determine if Javascript array contains an object with an attribute that equals a given value?Elmer Dantas– Elmer Dantas2017年11月27日 08:25:34 +00:00Commented Nov 27, 2017 at 8:25
6 Answers 6
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 Comment
You are writing the function in a wrong way
Try like this
const result = users.filter(x => x.user.id === 1);
console.log(result);
1 Comment
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);
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 Comments
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 Comment
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