I am trying to insert a hyphen "‐" between the even numbers in an array so if i have 43268356925485942568 it shows 432–6–83569254–8594–256–8. The numbers are randomly generated. I tried several things but no luck.
<body>
<div id="arrayDisp">
</div>
<div id="numbers">
</div>
<script>
var numbers = new Array(20);
var numbers2 = new Array(20)
for (var i = 0; i< numbers.length; i++)
{
numbers[i] = parseInt(Math.random() * 10);
}
document.getElementById("arrayDisp").innerHTML = numbers.join(" ");
for(var i in numbers)
{
if(i%2 == 0)
{
numbers2.push('‐',i);
}
else
{
numbers2.push(i);
}
}
document.getElementById("numbers").innerHTML = numbers2.join("");
</script>
</body>
I am trying to insert a hyphen "‐" between the even numbers in an array so if i have 43268356925485942568 it shows 432–6–83569254–8594–256–8. The numbers are randomly generated. I tried several things but no luck.
<body>
<div id="arrayDisp">
</div>
<div id="numbers">
</div>
<script>
var numbers = new Array(20);
var numbers2 = new Array(20)
for (var i = 0; i< numbers.length; i++)
{
numbers[i] = parseInt(Math.random() * 10);
}
document.getElementById("arrayDisp").innerHTML = numbers.join(" ");
for(var i in numbers)
{
if(i%2 == 0)
{
numbers2.push('‐',i);
}
else
{
numbers2.push(i);
}
}
document.getElementById("numbers").innerHTML = numbers2.join("");
</script>
</body>
Share
Improve this question
asked Feb 28, 2015 at 20:56
criscris
312 silver badges6 bronze badges
3
- If the pattern is fixed (i.e. XXX–X–XXXXXXXX–XXXX–XXX–X) I would do it server side using something like sprintf function – sdespont Commented Feb 28, 2015 at 20:59
- what are you getting as a result now? – T McKeown Commented Feb 28, 2015 at 20:59
- @sdespont - the numbers are randomly generated – j08691 Commented Feb 28, 2015 at 20:59
5 Answers
Reset to default 4Just check the current and next number to see if they are even ?
function addHyphen(str) {
var arr = str.split('');
return arr.map(function(n, i) {
return (n % 2 === 0) && (arr[i+1] % 2 === 0) ? n+'-' : n;
}).join('');
}
// provided number
var s = '43268356925485942568';
var result1 = addHyphen(s);
// create random number
var rand = (new Array(20)).join('s').split('s').map(function(x) {
return parseInt(Math.random() * 10, 10);
}).join('');
var result2 = addHyphen(rand);
document.body.innerHTML = result1 + '<br />' + result2;
You can use a regular expression to find an even digit followed by another and insert a dash there:
var numbers = '';
for (var i = 0; i < 20; i++) {
numbers += Math.floor(Math.random() * 10);
}
numbers = numbers.replace(/([02468])(?=[02468])/g, '$1-');
// show in Stackoverflow snippet
document.write(numbers);
Explanation:
() captures a match
([02468]) matches an even digit and captures it
(?=) is a positive look-ahead
(?=[02468]) matches when the next digit is even
The replacement string uses $1
to insert the captured digit and then a dash.
I don't understand why everybody es up with overplex (and sometimes non functional) code. It's simple task! No callbacks, regexps are needed and they don't even make the code easy to understand!
Using Array.splice
and working with original array
/** Requires array of numbers, changes THAT array, returns null
* @param numbers array of numbers
**/
function addHyphenWhenEven(numbers) {
for(var i=1, l=numbers.length;i<l; i++) {
if((numbers[i]%2 + numbers[i-1]%2) == 0) {
//Splice inserts 3rd parameter before i-th position
numbers.splice(i, 0, "-");
//Must shift the positions as the array dimensions have changed
i--;l++;
}
}
}
Using new array
/** Requires array of numbers, returns new array with hyphens
* @param numbers array of numbers
* @return array with numbers and hyphens
**/
function addHyphenWhenEven2(numbers) {
if(numbers.length==0)
return [];
var result = [numbers[0]];
for(var i=1, l=numbers.length;i<l; i++) {
if((numbers[i]%2 + numbers[i-1]%2) == 0) {
result.push("-");
}
result.push(numbers[i]);
}
return result;
}
/** Requires array of numbers, changes THAT array, returns null
* @param numbers array of numbers
**/
function addHyphenWhenEven(numbers) {
for(var i=1, l=numbers.length;i<l; i++) {
if((numbers[i]%2 + numbers[i-1]%2) == 0) {
//Splice inserts 3rd parameter before i-th position
numbers.splice(i, 0, "-");
//Must shift the positions as the array dimensions have changed
i--;l++;
}
}
}
/** Requires array of numbers, returns new array with hyphens
* @param numbers array of numbers
* @return array with numbers and hyphens
**/
function addHyphenWhenEven2(numbers) {
if(numbers.length==0)
return [];
var result = [numbers[0]];
for(var i=1, l=numbers.length;i<l; i++) {
if((numbers[i]%2 + numbers[i-1]%2) == 0) {
result.push("-");
}
result.push(numbers[i]);
}
return result;
}
var random = [];
while(random.length<20)
{
random.push(Math.floor(Math.random()*10));
}
$("#res2")[0].innerHTML = addHyphenWhenEven2(random).join("");
addHyphenWhenEven(random);
$("#res1")[0].innerHTML = random.join("");
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<h2>Using <tt>Array.splice</tt></h2>
<div id="res1"></div>
<h2>Using second array that is returned:</h2>
<div id="res2"></div>
var numbers = [];
var hiphenated = [];
for (var i = 0; i < 20; i++) {
numbers.push(parseInt(Math.random() * 10));
}
numbers.forEach(function(n) {
if (n % 2 == 0) {
hiphenated.push(n + '-');
} else {
hiphenated.push(n);
}
});
var s = "43268356925485942568";
s = s.split('').reduce(function(a, b) {
return a + ((!a || (a.slice(-1) & 1) || (b & 1))? '' : '-') + b;
}, '');
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744126325a4559628.html
评论列表(0条)