第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

慣用地找到給定值在數(shù)組中出現(xiàn)的次數(shù)

慣用地找到給定值在數(shù)組中出現(xiàn)的次數(shù)

我有一個(gè)重復(fù)值的數(shù)組。我想找到任何給定值的出現(xiàn)次數(shù)。例如,如果我有一個(gè)這樣定義的數(shù)組:var dataset = [2,2,4,2,6,4,7,8];,我想查找數(shù)組中某個(gè)值出現(xiàn)的次數(shù)。也就是說(shuō),程序應(yīng)該顯示如果我出現(xiàn)3次value 2,發(fā)生1次value 6,依此類推。什么是最慣用/優(yōu)雅的方法?
查看完整描述

3 回答

?
HUX布斯

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊

reduce比f(wàn)ilter它不僅僅為了計(jì)數(shù)而建立一個(gè)臨時(shí)數(shù)組,在這里更合適。


var dataset = [2,2,4,2,6,4,7,8];

var search = 2;


var count = dataset.reduce(function(n, val) {

    return n + (val === search);

}, 0);


console.log(count);

在ES6中:


let count = dataset.reduce((n, x) => n + (x === search), 0);

請(qǐng)注意,使用自定義匹配謂詞進(jìn)行擴(kuò)展很容易,例如,對(duì)具有特定屬性的對(duì)象進(jìn)行計(jì)數(shù):


people = [

    {name: 'Mary', gender: 'girl'},

    {name: 'Paul', gender: 'boy'},

    {name: 'John', gender: 'boy'},

    {name: 'Lisa', gender: 'girl'},

    {name: 'Bill', gender: 'boy'},

    {name: 'Maklatura', gender: 'girl'}

]


var numBoys = people.reduce(function (n, person) {

    return n + (person.gender == 'boy');

}, 0);


console.log(numBoys);

{x:count of xs}在javascript中,對(duì)所有項(xiàng)目進(jìn)行計(jì)數(shù)(即使對(duì)象成為對(duì)象)非常復(fù)雜,因?yàn)閷?duì)象鍵只能是字符串,因此無(wú)法可靠地對(duì)具有混合類型的數(shù)組進(jìn)行計(jì)數(shù)。不過(guò),以下簡(jiǎn)單的解決方案在大多數(shù)情況下仍然可以正常使用:


count = function (ary, classifier) {

    classifier = classifier || String;

    return ary.reduce(function (counter, item) {

        var p = classifier(item);

        counter[p] = counter.hasOwnProperty(p) ? counter[p] + 1 : 1;

        return counter;

    }, {})

};


people = [

    {name: 'Mary', gender: 'girl'},

    {name: 'Paul', gender: 'boy'},

    {name: 'John', gender: 'boy'},

    {name: 'Lisa', gender: 'girl'},

    {name: 'Bill', gender: 'boy'},

    {name: 'Maklatura', gender: 'girl'}

];


// If you don't provide a `classifier` this simply counts different elements:


cc = count([1, 2, 2, 2, 3, 1]);

console.log(cc);


// With a `classifier` you can group elements by specific property:


countByGender = count(people, function (item) {

    return item.gender

});

console.log(countByGender);

在ES6中,您可以使用Map對(duì)象可靠地計(jì)數(shù)任意類型的對(duì)象。


class Counter extends Map {

    constructor(iter, key=null) {

        super();

        this.key = key || (x => x);

        for (let x of iter) {

            this.add(x);

        }

    }

    add(x) {

      x = this.key(x);

      this.set(x, (this.get(x) || 0) + 1);

    }

}


// again, with no classifier just count distinct elements


results = new Counter([1, 2, 3, 1, 2, 3, 1, 2, 2]);

for (let [number, times] of results.entries())

    console.log('%s occurs %s times', number, times);



// counting objects


people = [

    {name: 'Mary', gender: 'girl'},

    {name: 'John', gender: 'boy'},

    {name: 'Lisa', gender: 'girl'},

    {name: 'Bill', gender: 'boy'},

    {name: 'Maklatura', gender: 'girl'}

];



chessChampions = {

    2010: people[0],

    2012: people[0],

    2013: people[2],

    2014: people[0],

    2015: people[2],

};


results = new Counter(Object.values(chessChampions));

for (let [person, times] of results.entries())

    console.log('%s won %s times', person.name, times);


// you can also provide a classifier as in the above


byGender = new Counter(people, x => x.gender);

for (let g of ['boy', 'girl'])

   console.log("there are %s %ss", byGender.get(g), g);

的類型感知實(shí)現(xiàn)Counter可以如下所示(Typescript):


type CounterKey = string | boolean | number;


interface CounterKeyFunc<T> {

    (item: T): CounterKey;

}


class Counter<T> extends Map<CounterKey, number> {

    key: CounterKeyFunc<T>;


    constructor(items: Iterable<T>, key: CounterKeyFunc<T>) {

        super();

        this.key = key;

        for (let it of items) {

            this.add(it);

        }

    }


    add(it: T) {

        let k = this.key(it);

        this.set(k, (this.get(k) || 0) + 1);

    }

}


// example:


interface Person {

    name: string;

    gender: string;

}



let people: Person[] = [

    {name: 'Mary', gender: 'girl'},

    {name: 'John', gender: 'boy'},

    {name: 'Lisa', gender: 'girl'},

    {name: 'Bill', gender: 'boy'},

    {name: 'Maklatura', gender: 'girl'}

];



let byGender = new Counter(people, (p: Person) => p.gender);


for (let g of ['boy', 'girl'])

    console.log("there are %s %ss", byGender.get(g), g);


查看完整回答
反對(duì) 回復(fù) 2019-11-28
?
qq_遁去的一_1

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊

較新的瀏覽器僅由于使用 Array.filter


var dataset = [2,2,4,2,6,4,7,8];

var search = 2;

var occurrences = dataset.filter(function(val) {

    return val === search;

}).length;

console.log(occurrences); // 3


查看完整回答
反對(duì) 回復(fù) 2019-11-28
?
慕雪6442864

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

這是一次顯示所有計(jì)數(shù)的一種方法:


var dataset = [2, 2, 4, 2, 6, 4, 7, 8];

var counts = {}, i, value;

for (i = 0; i < dataset.length; i++) {

    value = dataset[i];

    if (typeof counts[value] === "undefined") {

        counts[value] = 1;

    } else {

        counts[value]++;

    }

}

console.log(counts);

// Object {

//    2: 3,

//    4: 2,

//    6: 1,

//    7: 1,

//    8: 1

//}


查看完整回答
反對(duì) 回復(fù) 2019-11-28
  • 3 回答
  • 0 關(guān)注
  • 325 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)