【问题标题】:Sorting arrays, probably rookie mistake排序数组,可能是菜鸟错误
【发布时间】:2021-09-04 23:22:01
【问题描述】:

你好吗?这就是事情,我一直在尝试制作一个 btn,当用户点击它时按价格订购一系列产品,但它不起作用,我认为这是我使用排序的排序功能,因为我已经不太了解排序功能了,这就是我想要做的:

function ordmayorPrecio(arrprod) {
    arr = arrprod.sort(function (a,b){
    let precioa = parseInt(a.cost)
    let preciob = parseInt(b.cost)

    return precioa-preciob;
})
}

function ordmenorPrecio(arrprod) {
    arr = arrprod.sort(function (a,b){
    let precioa = parseInt(a.cost)
    let preciob = parseInt(b.cost)

    return preciob-precioa;
})
}

这就是我尝试使按钮起作用的方式:

document.addEventListener("DOMContentLoaded", function (e) {
     getJSONData(PRODUCTS_URL)
    .then((result) => result.data)
    .then((productdata) => mostrarProductos(productdata));

    document.getElementById("sortDescPrice").addEventListener("click", function(){
        mostrarProductos(ordmenorPrecio(productdata));
    });

    document.getElementById("sortAscPrice").addEventListener("click",function(){
        mostrarProductos(ordmayorPrecio(productdata));
})

});

这就是我尝试将其附加到 HTML 的方式:

function mostrarProductos(arr){

    let productosAppend = '';

for(let i = 0; i < arr.length; i++){
        let producto = arr[i];

        productosAppend += `
            <a href="product-info.html" class="list-group-item list-group-item-action">
                <div class="row">
                    <div class="col-3">
                        <img src="` + producto.imgSrc + `" alt="` + producto.description + `" class="img-thumbnail">
                    </div>
                    <div class="col">
                        <div class="d-flex w-100 justify-content-between">
                            <h4 class="mb-1">`+ producto.name +`</h4>
                            <small class="text-muted">` + producto.soldCount + ` artículos</small>
                        </div>
                            <small class="text-muted">` + producto.cost + " " + producto.currency + ` </small>
                        <p class="mb-1">` + producto.description + `</p>
                        
                    </div>
                </div>
            </a>
            `
}
    document.getElementById("produto").innerHTML = productosAppend;
}


【问题讨论】:

    标签: javascript arrays sorting


    【解决方案1】:

    假设 API 返回具有cost 属性的对象数组,您的排序看起来是合理的。但是你需要返回排序后的数组:

    function ordmayorPrecio(arrprod) {
        return arrprod.sort(function (a, b) {
            let precioa = parseInt(a.cost)
            let preciob = parseInt(b.cost)
            return precioa - preciob;
        })
    }
    function ordmenorPrecio(arrprod) {
        return arrprod.sort(function (a, b) {
            let precioa = parseInt(a.cost)
            let preciob = parseInt(b.cost)
            return preciob - precioa;
        })
    }
    

    事件侦听器需要引用来自.thenproductdata 参数——目前,他们没有,而是引用了外部的东西(甚至可能不存在?)。仅在响应返回后添加侦听器。

    document.addEventListener("DOMContentLoaded", function (e) {
        getJSONData(PRODUCTS_URL)
            .then((result) => result.data)
            .then((productdata) => {
                mostrarProductos(productdata);
                document.getElementById("sortDescPrice").addEventListener("click", function () {
                    mostrarProductos(ordmenorPrecio(productdata));
                });
                document.getElementById("sortAscPrice").addEventListener("click", function () {
                    mostrarProductos(ordmayorPrecio(productdata));
                })
            })
            .catch(handleErrors); // don't forget this part
    });
    

    【讨论】:

    • 伙计,我想我爱你,这真的很有帮助。 API 确实会返回一个成本,并且需要,productdata 在 .then 之外不存在,我不知道然后像那样工作,我试图在外部创建一个变量,如 ``` productdata = (await getJSONData(url)).data ` ``但是当我这样做时,页面就崩溃了:'),我认为您解决了它。去试试,非常感谢。
    • 使用内联比较函数样式也是一种很好的简洁方式,因为我们基本上只是处理升序与降序。 arrprod.sort((a, b) =&gt; return a-b); & arrprod.sort((a, b) =&gt; return b-a);
    • 是的,这是一个更好的选择,.sort((a, b) =&gt; a.cost - b.cost) 只要箭头函数不会让您感到困惑
    • 由于我的等级,我目前无法投票(我认为我需要 15 的声望等级),但我只是这样做了,它解决了问题,我开始喜欢这个社区和它的意愿帮忙,谢谢大家。我要试试那个箭头函数,它们确实让我感到困惑,但我必须在某个时候理解它们xd
    • @YasuoUy 你做了.sort((a, b) =&gt; a.cost - b.cost)吗?其他评论的arrprod.sort((a, b) =&gt; return a-b); 无效
    猜你喜欢
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 2017-08-31
    相关资源
    最近更新 更多