This works correctly:
self.getById = function(id) {
return ko.utils.arrayFirst(self.PostArray(), function(item) {
if (item.postId === id) {
return item;
}
else {
return 'not found';
}
});
};
console.log(self.PostArray().length);
console.log(self.getById(170));
But if I put return ''
or return null
in else block I always get null, why is that?
This works correctly:
self.getById = function(id) {
return ko.utils.arrayFirst(self.PostArray(), function(item) {
if (item.postId === id) {
return item;
}
else {
return 'not found';
}
});
};
console.log(self.PostArray().length);
console.log(self.getById(170));
But if I put return ''
or return null
in else block I always get null, why is that?
1 Answer
Reset to default 20You're not using arrayFirst
correctly. arrayFirst
expects a function that returns true
or false
, evaluating each item. The first item for which the function returns true
is returned. Here's how it should look:
self.getById = function(id) {
return ko.utils.arrayFirst(self.PostArray(), function(item) {
return item.postId === id;
}) || 'not found';
};
Basically return 'not found'
if item
is falsey (null
in this case most likely).
See this article for more information on the various utility functions in KnockoutJS.
ko.utils.arrayFirst
that will execute a function against each item in our array and returns the first item where the function evaluates to true. otherwise it returns null – Evon Dos Commented Aug 18, 2016 at 6:19