Javascript Loop Through List Items and Return the Results in an Array
I Have Been Trying to Loop Through an Unordered List of Numbers with Javascript. the Function Should Store All of the Numbers in an Array So I Can Find Which...
I have been trying to loop through an unordered list of numbers with javascript. The function should store all of the numbers in an array so I can find which numbers are duplicates. Any help would be appreciated. So far I have:
<html>
<head>
<title></title>
</head>
<body>
<ul id="ul">
<li>6</li>
<li>3</li>
<li>1</li>
<li>4</li>
<li>7</li>
<li>4</li>
<li>2</li>
<li>8</li>
<li>9</li>
<li>2</li>
</ul>
</body>
</html>
and a start on the javascript:
(function(){
var nums = document.getElementById("ul");
var listItem = nums.getElementsByTagName("li");
var newNums = "";
var dups = function(){
for (var i = 0; i < listItem.length; i++){
}
}; dups();
})();
what am I missing?
1 Answer
var nums = document.getElementById("ul");
var listItem = nums.getElementsByTagName("li");
var newNums = [];
for (var i=0; i < listItem.length; i++) {
newNums.push( parseInt( listItem[i].innerHTML, 10 ) );
}
To not get duplicated values you can do
for (var i=0; i < listItem.length; i++) {
var num = parseInt( listItem[i].innerHTML, 10 );
if (newNums.indexOf(num) === -1) {
newNums.push( num );
}
}
And to also get an array with the values that appear more than once
var newNums = [],
duplicate = [];
for (var i=0; i < listItem.length; i++) {
var num = parseInt( listItem[i].innerHTML, 10 );
if (newNums.indexOf(num) === -1) {
newNums.push( num );
}else{
duplicate.push( num );
}
}
Array.indexOf might not be supported in all browsers, but there's a polyfill over at MDN