javascript - 使用两个对象对数组进行排序

标签 javascript arrays

我需要对数组进行排序,但由于其中有两个对象,我不知道如何执行此操作。我需要按字母顺序对狗的名字和玩具编号进行升序排序。我怎样才能做到这一点?

function start() {
    document.getElementById("task").innerHTML="Task 8";
    var arr = [];
    var vName = "";
    vName = prompt("Enter dog name (leave blank to stop)");
    vToyNum = prompt("Enter number of dog toys (leave blank to stop)");
    while (vName.length > 0 && vToyNum.length > 0) {
        arr.push({name:vName,toynum:vToyNum});
        arr.sort({name:vName});
        vName = prompt("Enter dog name (leave blank to stop)");
        vToyNum = prompt("Enter number of dog toys (leave blank to stop)");
    }
    var vOutput = "Dog names and No. of toys:" + displayDog(arr);
    var toyTot = 0;
    for (var val=0; val < arr.length; val++) {
        toyTot += Number (arr[val].toynum);
    }
    vOutput += "<br/><br/>Total number of toys: " + toyTot;
    document.getElementById("output").innerHTML= vOutput;
}

function displayDog(arr) {
    var vOutput = "";
    for (var val = 0; val < arr.length; val++) {
        vOutput += "<br/> Dog " + (val + 1) +" "+ arr[val].name
                + ", No. of toys " + arr[val].toynum;
    }
    return vOutput;
}

最佳答案

您可以使用排序函数 Array#sort需要自定义排序,首先按 name 排序,然后按 toynum

arr.sort(function (a, b) {
    return a.name.localeCompare(b.name) || a.toynum - b.toynum;
});

在用数据填充数组后,您只需要排序一次。

function start() {
    document.getElementById("task").innerHTML = "Task 8";
    var arr = [],
        vName = "",
        vToyNum,
        vOutput,
        toyTot = 0,
        val,
        DOG_QUESTION = "Enter dog name (leave blank to stop)",
        TOY_QUESTION = "Enter number of dog toys (leave blank to stop)";

    vName = prompt(DOG_QUESTION);
    vToyNum = prompt(TOY_QUESTION);
    while (vName.length > 0 && vToyNum.length > 0) {
        arr.push({ name: vName, toynum: vToyNum });
        vName = prompt(DOG_QUESTION);
        vToyNum = prompt(TOY_QUESTION);
    }

    arr.sort(function (a, b) {
        return a.name.localeCompare(b.name) || a.toynum - b.toynum;
    });

    vOutput = "Dog names and No. of toys:" + displayDog(arr);
    
    for (val = 0; val < arr.length; val++) {
        toyTot += Number(arr[val].toynum);
    }

    vOutput += "<br /><br />Total number of toys: " + toyTot;
    document.getElementById("output").innerHTML = vOutput;
}

function displayDog(arr) {
    var val, vOutput = "";
    for (val = 0; val < arr.length; val++) {
        vOutput += "<br /> Dog " + (val + 1) + " " + arr[val].name + ", No. of toys " + arr[val].toynum;
    }
    return vOutput;
}

start();
<div id="task"></div>
<div id="output"></div>

关于javascript - 使用两个对象对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44153695/

相关文章:

c# - 将字符串值传递给双引号

javascript - ReactJS 通过 API 调用保护路由

javascript - 评估是邪恶的问题

java - 如何检查数组中是否找到用户输入?

arrays - Perl 中的数组赋值

javascript - 如何使用 Hashgraph JS SDK 检查帐户是否与 HTS token 关联

javascript - document.getElementById 似乎不起作用

javascript - jQuery 从 url 获取数组值

C具有不同指针的相同地址?

java - 如何从一串数字中获取数值?