# Possible bug with Observable.filter

**URL:** <https://forums.fusetools.com/t/possible-bug-with-observable-filter/3545>\
**Category:** Bug Reports\
**Created:** [August 31, 2016, 12:11pm UTC](https://forums.fusetools.com/t/possible-bug-with-observable-filter/3545 "2016-08-31T12:11:38Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![masterdavidswift](https://avatars.discourse-cdn.com/v4/letter/m/e274bd/32.png) [@masterdavidswift](https://forums.fusetools.com/u/masterdavidswift)\
**Post date:** [August 31, 2016, 12:11pm UTC](https://forums.fusetools.com/t/possible-bug-with-observable-filter/3545/1 "2016-08-31T12:11:38Z")

</div>

– fuse v0.25  
– OS X

version of fuse does not appear to be an issue since it had occurred with `0.24` too.  
I am testing on an iPhone 6s but I do not believe that is the issue, I cannot test on an android do to `fuse-contacts` causing a `missing permissions` error during compile time.

I’ve also included the full file to which you can see has filters being used else where but working fine.

full function

````auto
function newChat(){
    // TODO fetch for new chat id then add new chat to client db
    // if(contactsListValid.length > 0){
        console.log("open new chat");
        console.log("before filter " + JSON.stringify(contactsListValid));
        console.log("filter " + JSON.stringify(contactsListValid
                                                .filter
                                                (function (contact) { 
                                                    return contact.selected === true;
                                                })));
        var members = contactsListValid.filter(function (contact) { return contact.selected === true;});
                       
        console.log("members " + JSON.stringify(members));
        console.log("members length " + members.length);

        if(members.length > 0) {
            //TODO replace members with just a chat
            router.push("home", {}, "chat", {members: members});
        }
    // } else {
    // console.log("empty list");
    // }
};```

but specifically 

````

console.log("before filter " + JSON.stringify(contactsListValid));  
console.log("filter " + JSON.stringify(contactsListValid  
.filter  
(function (contact) {  
return contact.selected === true;  
})));

```auto
or this slightly different variant

```

console.log("before filter " + JSON.stringify(contactsListValid));  
console.log("filter " + JSON.stringify(contactsListValid  
.filter  
(function (contact) {  
return contact.selected.value === true;  
})));

```auto
have the same results which you'll find below.

```

before filter {"\_subscribers":[null],"\_isLeaf":true,"\_values":[{“firstName”:“Amo”,“lastName”:“Younis”,“organization”:null,“email”:[],“phone”:“0857168682”,“fullName”:“Younis Amo”,“selected”:{"\_subscribers":[null],"\_isLeaf":true,"\_values":[true]}}]}

filter {"\_subscribers":[],"\_isLeaf":false,"\_values":[]}

```auto

```

---

<div class="post-metadata">

**Author:** ![masterdavidswift](https://avatars.discourse-cdn.com/v4/letter/m/e274bd/32.png) [@masterdavidswift](https://forums.fusetools.com/u/masterdavidswift)\
**Post date:** [August 31, 2016, 12:12pm UTC](https://forums.fusetools.com/t/possible-bug-with-observable-filter/3545/2 "2016-08-31T12:12:33Z")

</div>

Would not let me upload the file but here is the full file

````auto
var Observable = require('FuseJS/Observable');
var contacts = require('Contacts');

contacts.authorize().then(function (status) {
    console.log(status);
    if (status === 'AuthorizationAuthorized') {
    	console.log("AuthorizationAuthorized")
        // console.log(JSON.stringify(contacts.getAll()));
        // contactsList = JSON.stringify(contacts.getAll());
    } else if (status === 'AuthorizationDenied'){
    	console.log("AuthorizationDenied");
    } else if (status === 'AuthorizationRestricted'){
    	console.log("AuthorizationRestricted");
    } else {
    	console.log("unknown");
    }
});

var contactsList = Observable(
                    contacts.getAll()
                    .filter(function(contact) {
                        return contact.phone.length > 0;
                    })
                    .map(function(contact) {
                        contact.firstName = contact.firstName;
                        contact.lastName = contact.lastName;
                        contact.fullName = contact.lastName + " " + contact.firstName;
                        // TODO do the replace function
                        contact.phone = contact.phone[0].phone.replace(/\s/g, "").replace(/"-"/g, "").replace(/"\("/g, "");
                        contact.selected = Observable(false);
                        return contact;
                    })
                    .sort(function(a,b){
                        if(a.lastName !== null && b.lastName !== null){
                            return a.lastName.localeCompare(b.lastName);
                        } else if(a.lastName === null || b.lastName === null){
                            if(a.lastName !== null){
                                return a.lastName.localeCompare(b.firstName);
                            } else if (b.lastName !== null){
                                return a.firstName.localeCompare(b.lastName);
                            }
                        } else if (a.firstName !== null && b.firstName !== null){
                            return a.firstName.localeCompare(b.firstName);
                        } else {
                            return a.phone.localeCompare(b.phone);
                        } 
                    }));

var contactsListValid = Observable();
function onload() {
    console.log("contacts numbers only" + contactsList.value.map(function(contact) {return contact.phone;}));
    fetch("http://192.168.192.116:3000/queryusers", {
        method: 'POST',
        headers: { "Content-type": "application/json"},
        body: JSON.stringify(contactsList.value.map(function(contact) {return contact.phone;})) 
    }).then(function (response){
        // console.log("response " + JSON.stringify(response));
        return response.json();
    }).then(function(responseObject) {
        console.log("response " + JSON.stringify(responseObject));
        contactsList.value.filter(function(contact){
            // console.log(JSON.stringify(contact));
            if(responseObject.indexOf(contact.phone) > -1) {
                console.log(JSON.stringify(contact));
                if(!contactsListValid.contains(contact)){
                    contactsListValid.add(contact);
                }
            } 
        });
        console.log("lenght " + JSON.stringify(contactsListValid.length));
    }).catch(function(err){
        debug.log("error: " + err.message);
    });
    console.log("after fetch " + JSON.stringify(contactsListValid));
};

function toggleSelect(args){
    args.data.selected.value = !args.data.selected.value;
    console.log("toggled data " + JSON.stringify(args.data) + JSON.stringify(args.data.selected.value));
};

function newChat(){
    // TODO fetch for new chat id then add new chat to client db
    // if(contactsListValid.length > 0){
        console.log("open new chat");
        console.log("before filter " + JSON.stringify(contactsListValid));
        console.log("filter " + JSON.stringify(contactsListValid
                                                .filter
                                                (function (contact) { 
                                                    return contact.selected === true;
                                                })));
        var members = contactsListValid.filter(function (contact) { return contact.selected === true;});
                       
        console.log("members " + JSON.stringify(members));
        console.log("members length " + members.length);

        if(members.length > 0) {
            //TODO replace members with just a chat
            router.push("home", {}, "chat", {members: members});
        }
    // } else {
    // console.log("empty list");
    // }
};

module.exports = {
	contacts: contactsListValid,
    toggleSelect: toggleSelect,
    goBack: function(){ router.goBack();},
    newChat: newChat,
    onload: onload
};```
````

---

<div class="post-metadata">

**Author:** ![masterdavidswift](https://avatars.discourse-cdn.com/v4/letter/m/e274bd/32.png) [@masterdavidswift](https://forums.fusetools.com/u/masterdavidswift)\
**Post date:** [August 31, 2016, 2:20pm UTC](https://forums.fusetools.com/t/possible-bug-with-observable-filter/3545/3 "2016-08-31T14:20:22Z")

</div>

Turns out it was no bug but merely me using the code in the wrong way
