function count_name(names) {
var kq = new Map();
names.forEach(function(item) {
if (!kq.has(item)) kq.set(item, 0);
kq.set(item, kq.get(item) + 1);
});
return kq;
}
function logMapElements(value, key) {
console.log(`m[${key}] = ${value}`);
}
countName(['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']).forEach(logMapElements);
Chuyển chuỗi thành mảng
Tuyệt chiêu, cái này thuộc về đẳng cấp rùi, mình hỏa hầu chưa tới. bái phục.
Cái này phải nhâm nhi như nhâm nhi ly cà phê!!!
cô đọng và xúc tích
mình nghĩ nó cũng đơn giản mà bạn, cho cái mảng bất kỳ,
- sort
- Tạo 2 biến, 1 đếm, 1 lưu giá trị tạm, rồi duyệt mảng
- Nếu a[i] === a[i+1] tăng biến đếm lên 1
else đẩy vào kết quả.
const name = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
let list = {};
name.forEach(name => {
list[name] = (list[name]) ? ++list[name] : 1;
});
console.log(list);
Không dùng reduce chỉ dùng vòng lặp bình thường.
Sao đơn giản thế Pro!!!, trên cả tuyệt vời.
Cho phép mô phỏng lại tí.
that.count_name_use_forEeach=function(){
const name = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice','Alice'];
var kq={};
name.forEach(function(v){
if(kq[v]){
kq[v]++;
}else{
kq[v]=1;
}
})
return kq;
}
result : {“Alice”:3,“Bob”:1,“Tiff”:1,“Bruce”:1}
Than ôi, Những vùng đất javascript mà tui chưa khai phá!!!
Cái mấu chốt cuối cùng có phải là chúng thuộc series “callback” ?
okay sort bạn. Mình với bạn thuộc loại classical rùi, Xem mấy Pro kia xài các kiểu hiện đại kìa … tuyệt vời.
Cái này bạn luyện thuật toán nhiều vào là làm được thôi bạn
Javascript chỉ là ngôn ngữ thể hiện ý tưởng thôi
Mình không rành js lắm, cũng đang học nhưng thấy cách này có vấn đề là dùng forEach để duyệt phần tử trong mảng, theo mình nghĩ như vậy thì độ phức tạp nó là O(n2) hay sao, hay trong đó còn có cái j khác nữa, hash chẳng hạn làm độ phức tạp chỉ còn O(n) ^^