S16
S16

Reputation: 2995

Remove leading and trailing spaces in object keys and values

Using the following function:

// remove multiple, leading or trailing spaces
function trim(s) {
    s = s.replace(/(^\s*)|(\s*$)/gi,"");
    s = s.replace(/[ ]{2,}/gi," ");
    s = s.replace(/\n /,"\n");
    return s;
}

removing the leading and trailing whitespaces in the value is not a problem. I know you can't rename keys, but I'm having difficulty acheiving the output I'm after.

$.each(data, function(index)
    {
        $.each(this, function(k, v)
        {
            data[index][trim(k)] = trim(v);
            data.splice(index, 1);
        });
    });

This is not achieving the desired output.

Any ideas? Would it be best to create a new object and then destroy the original? What would that syntax look like?

Example of data:

var data = [{
    "Country": "Spain",
    "info info1": 0.329235716,
    "info info2": 0.447683684,
    "info info3": 0.447683747},
{
    " Country ": " Chile ",
    "info info1": 1.302673893,
    "info info2 ": 1.357820775,
    "info info3": 1.35626442},
{
    "Country": "USA",
    "info info1  ": 7.78805016,
    "info info2": 26.59681951,
    "info info3": 9.200900779}];

Upvotes: 3

Views: 4153

Answers (2)

vichsu
vichsu

Reputation: 1890

Maybe I am late to this discussion but I'd like to share this question and answers from this link. This solution not only deal with this object presented above but also recursively trim keys and value(string type) in JavaScript object.

Hope this will help.

Trim white spaces in both Object key and value recursively

Upvotes: 0

Matt Ball
Matt Ball

Reputation: 360056

$.each(data, function(index) {
    var that = this;
    $.each(that, function(key, value) {
        var newKey = $.trim(key);

        if (typeof value === 'string')
        {
            that[newKey] = $.trim(value);
        }

        if (newKey !== key) {
            delete that[key];
        }
    });
});

Demo: http://jsfiddle.net/mattball/ZLcGg/

Upvotes: 2

Related Questions