Chuyển chuỗi thành mảng

Mình có một chuỗi
str="add,a,b,c,d,a,b,e,f";
Giờ mình muốn chuyển nó thành

ar=[
{ten:'a',solg:2},
{ten:'b',solg:2},
{ten:'c',solg:1},
{ten:'d',solg:1},
{ten:'e',solg:1},
{ten:'f',solg:1},
]

Có anh chị em nào giúp với? bằng javascript.
cám ơn trước.

Dùng method split nhé bạn:

var ar = str.split(",");

1 Like

còn cái đếm thì thế nào bạn?

function get_ds(){
    var str="hehe,a,a,b,c,b,d,e";
    var ar=str.split(',');
    ar.splice(0,1);//bỏ giá trị đầu
    var kq=[];
    //cái này thế nào? sao nỡ stop đúng lúc quan trọng
    return kq;
}
function count(arr) {
  return arr.reduce((prev, curr) => (prev[curr] = ++prev[curr] || 1, prev), {})
}

console.log(count(data))
1 Like

uh, exellent!!!
Đọc không hiểu nhưng ra kết quả!!!

const data = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4]
function count(arr) {
  return arr.reduce((prev, curr) => (prev[curr] = ++prev[curr] || 1, prev), {})
}
console.log(count(data))

/*    
result:
{
  "2": 5,
  "4": 1,
  "5": 3,
  "9": 1
}
*/

Cơ bản:
a.reduce((sum, curr) => sec_sum, 0); hay a.reduce(f, 0);
hay sum = 0; for v in a sum = f(sum, curr);

1 Like

hix,

Bốc một thằng ra
Repeat
Xét với các thằng còn lại nếu giống thì tăng đếm, đá nó ra khỏi mảng

Hay bạn

var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];

var countedNames = names.reduce(function (allNames, name) { 
  if (name in allNames) {
    allNames[name]++;
  }
  else {
    allNames[name] = 1;
  }
  return allNames;
}, {});
// countedNames is:
// { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }

Nếu không có cái này thực sự tui đổ mồ hôi hột code lên đến 30 dòng, !!!

Cái này thực sự là gì mà ảo diệu thế bạn?

Cái này được “bưng” từ bên lập trình hàm qua, cùng với arrow function (tên cúng cơm là anonymous function).

Có phải nó gọi là es5 gì đó không?
Hình như nó đâu có thuần của javascript, bởi vì nếu không có es5 thì nó không chạy?

*oops* Anonymous là từ ES5, còn viết kiểu arrow là ES6 mới có.

Mình có biết đâu, của cái bạn banhmisg9509 search ra đấy, mình cũng không quan tâm, Bạn code rõ ràng hơn đấy, mình chỉ thích rõ ràng.

Hay là level expert họ thích thế nhỉ!

Cú pháp reduce có gì không rõ ràng. Bạn lười tìm hiểu và thích đồ ăn sẵn thì đúng hơn.

5 Likes

Chỗ mình vẫn chưa hiểu là ++prev[curr] khi prev[curr] còn chưa tồn tại.

1 Like

nếu prev[curr] chưa tồn tại thì ++prev[curr] == NaNNaNfalsy => prev[curr] = ++prev[curr] || 1 trả đúng giá trị rồi

2 Likes

Giả sử như không dùng cái reduce kia thì thông thường viết thế nào, anh chị em viết chơi cho vui,
Xem như template sau:

function count_name(){
      var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
      var kq={};

      //code here

      return kq;
}

Bạn nào thấy vui thì viết đi kìa. Mình k thấy vui :smile:

2 Likes

Mình sử dụng phương pháp đánh dấu

Đây là phương pháp thứ hai đầy hình ảnh

  1. Close your eyes

  2. Imagination that you have two tupe of tenis balls, the right is contain 4 ball, the left is empty.

  3. Pick up one ball on the top of the right tupe, call it is current ball

  4. Repeat

    –pick up one ball in the right,
    –if it like current ball then throw out, else push it in to the left
    // collect data here
    until the right is empty

5, pour the left to the right
6. Repeat from 3 to 5 until the left is empty.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?