35

JavaScriptでは、以下は配列内の要素の数を検索します。配列に少なくとも1つの要素があると仮定します

arr = ["jam", "beef", "cream", "jam"]
arr.sort();
var count = 1;
var results = "";
for (var i = 0; i < arr.length; i++)
{
    if (arr[i] == arr[i+1])
    {
      count +=1;
    }
    else
    {
        results += arr[i] + " --> " + count + " times\n" ;
        count=1;
    }
}

sort()を使用せずに、または配列を変更せずにこれを行うことは可能ですか?配列を再作成してから、新しく作成した配列で並べ替えを実行する必要があると思いますが、並べ替えを行わずに最善の方法を知りたいと思います。はい、私はプログラマーではなくアーティストです。あなたの名誉です。

4

9 に答える 9

66

これを行う簡単な方法は、一意の要素をオブジェクトにコピーすることです。

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

このループが完了すると、countsオブジェクトには配列の各要素の数が含まれます。

于 2013-02-24T14:34:09.403 に答える
8

この式は、配列を変更せずに、配列内のすべての一意の要素を提供します。

arr.filter(function(v,i) { return i==arr.lastIndexOf(v); })

この式でチェーンして、ソートせずに結果の文字列を作成できます。

.forEach(function(v) {
     results+=v+" --> " + arr.filter(function(w){return w==v;}).length + " times\n";
});

最初のケースでは、フィルターは各特定の要素の最後のみを含みます。2番目のケースでは、フィルターにそのタイプのすべての要素が含まれ.length、カウントが示されます。

于 2013-02-24T14:32:21.500 に答える
0

function reomveDuplicates(array){
        var newarray = array.filter( (value, key)=>{
            return array.indexOf(value) == key
        });
        console.log("newarray", newarray);
    }
reomveDuplicates([1,2,5,2,1,8]);  

時間計算量 O(n) の hash Map を使用する

function reomveDuplicates(array){

    var obj ={};
    let res=[];

    for( arg of array){
        obj[arg] = true;
    }

    console.log(Object.keys(obj));


    for(key in obj){
        res.push(Number(key));  // Only if you want in Number 
    }

    console.log(res);
}
reomveDuplicates([1,2,5,2,1,8]);  
于 2021-02-22T15:09:02.103 に答える
0

この回答は初心者向けです。この問題を簡単に解決できるこの方法を試してみてください。このリンクから、reduce、filter、map 関数の完全なレッスンを見つけることができます。

const user = [1, 2, 2, 4, 8, 3, 3, 6, 5, 4, 8, 8];

const output = user.reduce(function (acc, curr) {
    if (acc[curr]) {
        acc[curr] = ++acc[curr];
    } else {
        acc[curr] = 1;
    }
    return acc;
}, {});

console.log(output);

于 2022-02-03T16:28:40.467 に答える