初学者程序员在这里。我正在努力完成一项带有输入文本的作业,将单词拆分为单个数组项,然后列出输出中每个单词的总数。分割输入工作正常,但我需要检查数组中的重复项目并删除该项目(需要保持其唯一性),同时增加该特定单词的计数。
这个想法是制作一个由单独的单词组成的数组,另一个是跟踪计数的数组。很高兴收到使用更简单方法的提示。
是的,我知道在SO上有几个解决这个问题的方法,但我不太明白如何使用函数来修复这个特定的代码。
function gen()
{
var arr = [];
var counter = [];
var str = document.getElementById("inpTxt").value;
str.toString();
str = str.split(" ");
for(var i = 0; i < str.length; i++)
{
arr.push(str[i]);
counter[i]++; //ignore that this array hasnt been properly declared yet, Im trying to make this equal length of arr with default value 0
//tried nested loop here for making comparison, didnt work
document.getElementById("print").innerHTML += "Total number of the word \"" + arr[i] + "\": " + counter[i] + " <br />";
}
}
答案 0 :(得分:2)
如果你正在使用ECMAScript2015(ES6),你可以从你的数组中构建一个Set
- 这可以保证单一性:
var inputArray = [1, 1, 2, 3, 2, 4, 5, 5, 4, 1];
console.log(new Set(inputArray)) // displays Set { 1, 2, 3, 4, 5 }
否则,您可以遍历数组并检查特定元素是否跟随另一个自身:
var inputArray = [1, 1, 2, 3, 2, 4, 5, 5, 4, 1];
// with ES6 :
var result = inputArray.filter((element, index) => ! inputArray.slice(0, index).includes(element));
// without ES6 :
result=[];
for (var i=0; i<inputArray.length; i++) {
var currentElement = inputArray[i];
var previouslyFound = false;
for (var j=0; j<i && !previouslyFound; j++) {
previouslyFound = inputArray[i] == inputArray[j];
}
if (!previouslyFound) result.push(currentElement);
}
但是,由于我们循环遍历数组,因此在没有首先统一数组的情况下计算出现次数的速度会快得多:
var inputArray = [1, 1, 2, 3, 2, 4, 5, 5, 4, 1];
// with ES6 :
var result = inputArray.reduce(function(map, element) {
map[element] = map.hasOwnProperty(element) ? map[element] + 1 : 1;
return map;
}, {});
// without ES6 :
var result = {};
for (var i=0; i<inputArray.length; i++) {
var currentElement = inputArray[i];
if (result.hasOwnProperty(currentElement)) {
result[currentElement] = result[currentElement] + 1;
} else {
result[currentElement] = 1;
}
}
答案 1 :(得分:0)
尝试数组的indexOf
方法来确定您是否已在数组中包含该字符串。
function gen()
{
var arr = [];
var counter = [];
var str = document.getElementById("inpTxt").value;
str.toString();
str = str.split(" ");
for(var i=0; i < str.length; i++)
{
if(arr.indexOf(str)==-1){
arr.push(str[i]);
counter[i]++; //ignore that this array hasnt been properly declared yet, Im trying to make this equal length of arr with default value 0
}
//tried nested loop here for making comparison, didnt work
document.getElementById("print").innerHTML += "Total number of the word \"" + arr[i] + "\": " + counter[i] + " <br />";
}
}
PS:请知道那里有更便宜的方法,但我只想尽力帮助。