排序和显示对象数组 JavaScript

问题描述 投票:0回答:1

我创建了一个函数来显示数组中的对象。

let shownObjects = myArray;
function showTheObjects(displayedObjects) {
    document.getElementByID('divToDisplayObjects').innerHTML = "";
    for (let i of shownObjects) {
        // Code to display the objects
    }
}

此代码按预期工作。

我还在 HTML 中创建了一个包含不同排序选项的选择标签。

我创建了一个函数来根据所选选项对对象进行排序。

let sortButton = document.getElementById('selectID');
function changeSortOfObjects() {
    let sortOption = sortButton.value;
    if (sortOption === "option-1") {shownObjects.sort(Sort By Name)}
    else if (sortOption === "option-2") {shownObjects.sort(Sort By Age)}
    showTheObjects(shownObjects)

}
sortButton.onchange = changeSortOfObjects;
changeSortOfObjects();

当我点击一个选择选项时,所有对象都从屏幕上消失,而不是重新排序。导致对象消失而不是重新排序的问题是什么?

我在 Stack Overflow 上查看了多个不同的问题,但找不到我的问题的任何答案。我也在网上寻找不同的视频和文章,但找不到我的问题的答案。

javascript arrays function object drop-down-menu
1个回答
0
投票

问题可能是由 showTheObjects 函数引起的,特别是行

document.getElementByID('divToDisplayObjects').innerHTML = "";.
每次调用 showTheObjects 函数时,该行都会清除 ID 为 divToDisplayObjects 的 HTML 元素的内容。这意味着当调用 changeSortOfObjects 函数并对 shownObjects 数组进行排序时,将使用排序后的数组再次调用 showTheObjects 函数,但首先它会清除 divToDisplayObjects 的内容,导致对象从屏幕上消失。

要解决此问题,您可以修改 showTheObjects 函数以仅添加到 HTML 元素的内容而不是清除它。您可以通过将行

document.getElementByID('divToDisplayObjects').innerHTML = "";
更改为
let displayDiv = document.getElementByID('divToDisplayObjects');
,然后将 for 循环中显示对象的行修改为
displayDiv.innerHTML += "<p>" + i + "</p>";.

这会将每个对象附加到 HTML 元素的内容而不是替换它。

这里是修改后的 showTheObjects 函数:

function showTheObjects(displayedObjects) {
    let displayDiv = document.getElementByID('divToDisplayObjects');
    displayDiv.innerHTML = "";
    for (let i of shownObjects) {
        displayDiv.innerHTML += "<p>" + i + "</p>";
    }
}

通过此修改,当调用 changeSortOfObjects 函数对 shownObjects 数组进行排序时,对象不应消失。

© www.soinside.com 2019 - 2024. All rights reserved.