簡體   English   中英

JavaScript - 使用 for...of 循環計算數組中的每個唯一元素

[英]JavaScript - Using a for…of loop to count each unique element in an array

大家好,我被一個練習題困住了,真的想不出一個好的解決方案。

問題是:

“loopOverArray() 函數將一個方向數組作為參數,並將一個空對象保存為變量,該變量存儲每個方向以及它在數組中的次數。使用 for 循環,該函數需要遍歷每個方向數組中的元素並更新對象以顯示在數組中找到每個方向的次數。”

預期輸出應如下所示:

loopOverArray(["n", "s", "e", "e"] ==> returns {n: 1, s: 1, e: 2}
loopOverArray(["north", "south", "south", "north"] ==> returns {north: 2, south: 2}
loopOverArray([]) ==> returns {}

這是我迄今為止嘗試過的。 我是 JS 新手,所以請原諒非常笨拙的嘗試。

function loopOverArray(directions) {
        let ncount = 0;
        let ecount = 0;
        let scount = 0;
        let wcount = 0;
 

    for (let direction of directions) {

        if (direction == "n") {
            ncount += 1;
        } else if (direction == "e") {
            ecount += 1;
        } else if (direction == "s") {
            scount += 1;
        } else {
            wcount += 1;
        }
    }
        console.log(`n: ${ncount}, s: ${scount}, e: ${ecount}, w: ${wcount}`)
}

loopOverArray(["n", "n", "s"]);

問題是我認為這不能正確滿足問題要求,而且它非常丑陋。 一定會有更好的辦法。 任何幫助將不勝感激

我們創建一個空對象

let counts = {};

並循環遍歷方向數組。

在每次迭代中,我們檢查counts對象中是否已經有方向計數,或者考慮0 ,然后增加 1。

counts[direction] = (counts[direction] || 0) + 1;

 function loopOverArray(directions) { let counts = {}; for (const direction of directions) { counts[direction] = (counts[direction] || 0) + 1; } return counts; } console.log(loopOverArray(["n", "s", "e", "e"]));

要求您使用 object 所以你快到了。 只需將您的變量名稱、您的方向視為對象屬性鍵即可。

 function loopOverArray(directions) { // Define the object const obj = {}; for (let direction of directions) { // If the object key (the direction) on the object doesn't exist // create it and set the value to zero if (!obj[direction]) obj[direction] = 0; // Then just increment the value obj[direction] += 1; } // And then return the object from the function // once all the array iterations are done return obj; } console.log(loopOverArray([ 'n', 'n', 's' ])); console.log(loopOverArray([ 'north', 'north', 'south', 'east' ]));

檢查這是否適合您:

var counts = {};
for (var i = 0; i < yourArray.length; i++) {
    counts[yourArray[i]] = 1 + (counts[yourArray[i]] || 0);
}

您可以在此處查看更多答案: 計算數組中的唯一元素而不進行排序

你可以試試這個

function loopOverArray(directions) {
    let result = {}
    for (let direction of directions) {
        direction in result ? result[direction]++ : result[direction] = 1
    }
    console.log(result)
}
loopOverArray(["n", "n", "s"]);
function findOccurences(directions,elementToFind){    
    var result = directions.reduce(function (elementToFind, total, number){
            return total += number==elementToFind;
        }.bind(this, elementToFind), 0);
    return result;
}
var ar = ['n', 'e', 'w', 's', 's', 's','e', 'e'];   
        
console.log(`n: ${findOccurences(ar, 'n')}, s: ${findOccurences(ar, 's')}, e: ${findOccurences(ar, 'e')}, w: ${findOccurences(ar, 'w')}`);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM