I have the following code that converts a string that looks like:
aaa-bbb|ccc-ddd|eee-fff
to two strings that look like:
aaa|ccc|eee
and
bbb|ddd|fff
The code works fine, but I am wondering if I probably missed some string/array functions that can makes the job in fewer operations / or with faster runtime.
var id = "HEL-CAS|MAD-STO|XXX-YYY"
var splittedId = id.split('|');
var from = "",
to = "";
$(splittedId).each(function(a, b) {
from = from + b.split("-")[0] + "|";
to = to + b.split("-")[1] + "|";
});
from = from.substring(0, from.length - 1);
to = to.substring(0, to.length - 1);
2 Answers 2
You can use some ES6 functions and have something like:
var s = 'HEL-CAS|MAD-STO|XXX-YYY';
var s1 = [];
var s2 = []
for (var v of s.split('|').map(str => str.split('-'))) {
s1.push(v[0])
s2.push(v[1])
}
s1.join('|')
s2.join('|')
You can make from
and to
to array and use array.join()
. This might help you if you wish to process certain values in this list later.
var str = "HEL-CAS|MAD-STO|XXX-YYY"
var from = [], to = [];
str.split('|').forEach(function(item){
var _tmp = item.split("-");
from.push(_tmp[0]);
to.push(_tmp[1]);
});
console.log(from.join("|"), to.join("|"));
-
\$\begingroup\$ You probably meant
from.join("|")
.. but still I would love to have some profiler information between the two versions (mine and yours) \$\endgroup\$najibla– najibla2016年02月10日 11:52:41 +00:00Commented Feb 10, 2016 at 11:52 -
1\$\begingroup\$ @najibla Inspired by your question, I actually widened its requirement so rather than an answer I posted it as a new question. You can look at it [here] (codereview.stackexchange.com/questions/119722/…). \$\endgroup\$cFreed– cFreed2016年02月12日 16:46:19 +00:00Commented Feb 12, 2016 at 16:46