저는 초급 연습을하고 있으며 숫자 배열의 평균 / 중간 / 모드 / 범위를 찾습니다. 나는 지금 모드에 있으며 이것을 발견 했습니다 .
var store = ['1','2','2','3','4'];
var frequency = {}; // array of frequency.
var max = 0; // holds the max frequency.
var result; // holds the max frequency element.
for(var v in store) {
frequency[store[v]]=(frequency[store[v]] || 0)+1; // increment frequency.
if(frequency[store[v]] > max) { // is this frequency > max so far ?
max = frequency[store[v]]; // update max.
result = store[v]; // update result.
}
}
작동하지만 이해가되지 않습니다.
|| 0
첫 번째 줄에 무엇입니까?frequency["key"+store[v]]=(frequency[store[v]] || 0)+1;
{key1: 1, key2: 1, key3: 1, key4: 1}
not을 반환 {1: 1, 2: 2, 3: 1, 4: 1}
하므로 키가 중요한 역할을합니다.
의 인스턴스를 frequency[store[v]];
변수 ( var freqTest = frequency[store[v]];
, 루프 내부 또는 외부에서 생성됨)로 바꾸면 무언가가 깨집니다.
모든 것이 정말로 내 머리 위로 가고 있습니다.
전체 논리의 핵심은이 라인을 이해하는 것입니다.
frequency[store[v]]=(frequency[store[v]] || 0)+1;
왼쪽은 일부 숫자의지도로 사용되고 있습니다. v가 3이면 store [3]는 2를 반환하므로 frequency [2]에 액세스합니다.
이제 동일한 반복에 대해 오른쪽을 고려하십시오. 우리는 이미 알고 있습니다
frequency[store[3]]
결심하다
frequency[2]
그러나 이것은 무엇을 반환할까요? frequency [2]가 반복 2에서도 설정되었으므로 반복 2의 숫자에 액세스하게됩니다. 이제 반복 2에서 파생 된 값을 살펴 보겠습니다.
frequency[store[2]] = (frequency[store[2]] || 0)+1
frequency[2] = (frequency[2] || 0)+1
frequency[2] = (null || 0)+1
frequency[2] = 1
Ahhh ... 그래서 반복 3의 값은 실제로
frequency[2] = (frequency[2] || 0) + 1
frequency[2] = (1 || 0) + 1
frequency[2] = (1) + 1
frequency[2] = 2
보시다시피 루프는 frequency [n]을 맵으로 사용하며 발견 될 때마다 값을 증가시킵니다. 그러면 값이 더 높으면 max에 저장됩니다. 이것은 목록을 한 번만 반복하면서 가장 높은 반복 값을 찾는 매우 현명한 방법입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다