删除数组

时间:2016-10-12 09:43:42

标签: javascript arrays

初学者程序员在这里。我正在努力完成一项带有输入文本的作业,将单词拆分为单个数组项,然后列出输出中每个单词的总数。分割输入工作正常,但我需要检查数组中的重复项目并删除该项目(需要保持其唯一性),同时增加该特定单词的计数。

这个想法是制作一个由单独的单词组成的数组,另一个是跟踪计数的数组。很高兴收到使用更简单方法的提示。

是的,我知道在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 />";
    }
}

2 个答案:

答案 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:请知道那里有更便宜的方法,但我只想尽力帮助。