我想对前 6 个元素进行排序,但它正在排序和显示所有元素

I want to sort first 6 element but it is sorting and displaying all element

提问人:Shihan Chowdhury 提问时间:3/4/2023 更新时间:3/4/2023 访问量:53

问:

我使用参数在loadAllData(limit)函数中获取数据。并调用代码的函数末尾。在第一步中,我调用 loadAllData(6),以便它显示前 6 个元素,当显示更多按钮 clicekd 时,它调用没有参数的 loadAllData()。在displayAllData(data, limit)中,它检查是否有限制,然后将数组拆分为6或遍历data(array)。


const loadAllData = (limit) => {
    const url = 'https://openapi.programming-hero.com/api/ai/tools';
    fetch(url)
        .then(res => res.json())
        .then(data => displayAllData(data.data.tools, limit))
        .catch(err => console.log(err))
}
const displayAllData = (data, limit) => {

    const cardContainer = document.getElementById('cardContainer');
    // cardContainer.innerText = '';
    
    if(limit && data.length >=6) {
        cardContainer.innerText = '';
        document.getElementById('showMoreBtn').classList.remove('d-none');
        data = data.slice(0, 6);
    }
    else {
        cardContainer.innerText = '';
        document.getElementById('showMoreBtn').classList.add('d-none');
    }
    
    for (const element of data) {
        //It works fine
    }
}

loadAllData(6);
document.getElementById('showMoreBtn').addEventListener('click', function() {
    document.getElementById('loaderDiv').classList.add('d-block');
    document.getElementById('showMoreBtn').classList.add('d-none');
    loadAllData();
})

当调用“按日期排序”时,它将排序后的数据传递给 displayAllData(data)。现在的问题是,在单击“显示更多”按钮或展开所有数据后,“按日期排序”可以正常工作。但是当“按日期排序”点击时,有 6 个元素。它还显示了所有数据并进行了排序。

const sortFunction = (data) => {
    data.sort(function (a, b) {
        var c = new Date(a.published_in);
        var d = new Date(b.published_in);
        return d - c;
    });

    displayAllData(data);
}

请帮帮我。 提前致谢

我尝试对前(初始)6 个元素进行排序;但是当我单击“按日期排序”时,它会对所有数据进行排序并显示所有数据。

JavaScript 数组 API 排序 切片

评论

1赞 Andy 3/4/2023
你没有展示如何被称呼。sortFunction

答:

0赞 katniss 3/4/2023 #1

using 就地对数组进行排序并改变原始数组。在对数据数组进行排序之前,您应该制作一个(浅层)副本。sort

const sortFunction = (data) => {
    const copy = [...data]; // or data.slice(0)

    copy.sort(function (a, b) {
        var c = new Date(a.published_in);
        var d = new Date(b.published_in);
        return d - c;
    });

    displayAllData(copy);
};

评论

0赞 Shihan Chowdhury 3/4/2023
我的排序函数工作正常,但问题是当我尝试对 default(6) 元素进行排序时,它会对所有数据进行排序并显示。