Question

I have to loop an array of values and replace an identifier with an incrementing value if found. My solution works, but I'm looking for a better way to do this:

// somewhere
util.counter = 0;

// testForString
util.testForString = function (search_string, full_string, nowrap) {
    var s = nowrap ? "" : " ";
    return (s + full_string + s).indexOf(s + search_string + s) > -1;
};

// when saving a file, I loop over it's submitted form values
for (key in record) {
    if (record.hasOwnProperty(key)) {

        // TODO: improve
        value = record[key];
        if (util.testForString("__increment__", value) {
            set = value.replace("__increment__", util.counter);
            util.counter += 1;
        }
        obj[key] = set || value;
    }
}

I don't really like this approach of having to check every field for the __increment__ placeholder, so...

Question(s): Can this be done any better? Also is it possible to get the value of the counter AND increment it in the same step?

I don't want to use jQuery, so please JavaScript only.

Thanks!

Was it helpful?

Solution

Regarding the second part of your question, coupled with the fact that you are starting your counter from 0, the first pass of the loop will record 0 occurrence instead of 1.

What you can do to fix that and also keep it in one line:

value.replace("__increment__", util.counter++)

i.e. Increment the counter inline.

In fact ++util.counter would be better. And remove the next line of util.counter += 1.

How you can better your algorithm is beyond me!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top