admin管理员组文章数量:1396114
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;
}, '');
本文标签: javascriptInsert a hyphen between even numbers inside an arrayStack Overflow
版权声明:本文标题:javascript - Insert a hyphen between even numbers inside an array - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744126324a2591967.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论