How to parse a collection of objects in Backbone? In my Backbone.Collection I need to parse the response before to render it in Backbone.View.  The following code works, but it will be great to have some suggestions:

// response is array of object 
// [{id:1, prop: null },{id:2, prop: "bar" }]

// the output parsed_response can be 
//[{id:1, prop: null, isProp: true },
// {id:2, prop: "bar", isProp: false }]

parse: function(response)
{
    var parsed_response;

    parsed_response = _(response).clone();

    var parsed_response = _.map(parsed_response, function (obj) { 
        return function (_obj) {
            if (_obj.prop === "" || typeof _obj.prop === "null" ) {
                _obj.isProp = false;
            } 
            else {
                _obj.isProp = true;
            }
            return _obj;
        }(obj) 
    });

    return parsed_response;
}


My questions are:


Is there a way to improve the code?  Also renaming the name of variables to make it more clear.   
Since this code should be reused from other collections, what is the best way to generalise it?
Based on the way your parse function works you're worried about mutability. Your code can be much shorter. Also, your use of _.clone is wasted since it's only a shallow copy. I've rewritten parse code and now it looks like this:

// response is array of object 
// [{id:1, prop: null },{id:2, prop: "bar" }]

// the output parsed_response can be 
//[{id:1, prop: null, isProp: true },
// {id:2, prop: "bar", isProp: false }]

parse: function(response)
{
    return _.map(response, function(obj) {
        obj = _.clone(obj);
        obj.isProp = obj.prop !== "" &amp;&amp; obj.prop !== null;
        return obj;
    });
}


If you want further explanation let me know :)

The only thing I'm concerned with is how your prop works? Can you just check for a falsey value here (i.e. !obj.prop) or do you really need to explicitly check for an empty string or null?

In term of re-usability, you're covered here. parse() doesn't reference this so it can more or less be called statically from anywhere in your code. But be careful where you use it from, if you start calling this all over the place, it would make more sense to refactor this parse() function to a more generic object.