Массив сортировки javacript по имени - PullRequest
0 голосов
/ 14 июля 2020

Я сортирую массив, содержащий объекты. Я сортирую фамилии по алфавиту. Но когда я распечатываю, появляется только первый элемент отсортированного массива, и он заполняет массив. Значение означает array = [{name: "White, David", score: 100}, {name: "Bee, Axis", score: 101}] после сортировки по фамилии массив становится array = [{name: " Bee, Axis ", score: 101}, {name:" Bee, Axis ", score: 101}], вся информация одинакова. Не знаю, что было не так?

вот для заполнения массива:

for (let i = 0; i < 10; i++)
{
    record.Customer= customerName[i];
    record.MonthlyCharge = monthlyCharge[i];
    record.PastDueAmount = pastDueAmount[i];
    record.DaysPastDue = numDaysPastDue[i];
    records.push(record); 
    
    table += `<tr>`;
    table +=`<td>${record.Customer}</td>`;
    table +=`<td>$${record.MonthlyCharge}</td>`;
    table +=`<td>$${record.PastDueAmount}</td>`;
    table +=`<td>${record.DaysPastDue}</td>`;
    table +=`</tr>`;
}
tableBody.innerHTML = table;

Чтобы отсортировать массив

nameColumn.addEventListener("click", function (){
    records.sort((a,b)=>a.Customer.localeCompare(b.Customer));
    updateTable();
});

function updateTable()
{
    let table = "";
    for (let record of records)
    {
        table += `<tr>`;
        table +=`<td>${record.Customer}</td>`;
        table +=`<td>$${record.MonthlyCharge}</td>`;
        table +=`<td>$${record.PastDueAmount}</td>`;
        table +=`<td>${record.DaysPastDue}</td>`;
        table +=`</tr>`;
    }
    tableBody.innerHTML = table;
}

1 Ответ

3 голосов
/ 14 июля 2020

Ваша проблема заключается в коде, который заполняет таблицу. Вы всегда ссылаетесь на один и тот же объект записи и каждый раз меняете его значения. Вот почему все записи имеют значения вашего последнего ввода. Вот как должно быть:

for (let i = 0; i < 10; i++)
    {
        // you need to instantiate a new record if it's a class or simply create a new object
        record = {}
        record.Customer= customerName[i];
        record.MonthlyCharge = monthlyCharge[i];
        record.PastDueAmount = pastDueAmount[i];
        record.DaysPastDue = numDaysPastDue[i];
        records.push(record); 
        
        table += `<tr>`;
        table +=`<td>${record.Customer}</td>`;
        table +=`<td>$${record.MonthlyCharge}</td>`;
        table +=`<td>$${record.PastDueAmount}</td>`;
        table +=`<td>${record.DaysPastDue}</td>`;
        table +=`</tr>`;
    }
    tableBody.innerHTML = table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...