javascript - 如何对网页中具有多个不同参数的 JSON 进行排序?

标签 javascript json sorting

对于一所学校,我正在创建一个程序,该程序使用 JSON 和 JavaScript 将数据拉回到网页上。我了解如何对数组进行排序并拉回它们匹配的值。可以说我有这个 JSON。

{"name":"Michael","age":30,"bday":"05/12/1982"}
{"name":"Andy", "age":30,"bday":"02/21/1992"}
{"name":"Justin", "age":19,"bday":"12/07/1972"}

我如何能够输入姓名、选择年龄和输入生日,并可以根据所使用的任意组合进行排序。

是说每个 30 岁且出生于 1992 年 2 月 21 日的人,还是每个 30 岁的人?我希望能够按数据输入的每种可能的组合进行排序,并且我不想只使用一堆 if() 语句。

最佳答案

该算法会查找 search 中的每个属性,如果所有比较都为 true,则该元素将添加到结果集中。

function filter(array, search) {
    return array.filter(function (a) {
        return Object.keys(search).every(function (k) {
            return (
                a[k] === search[k] ||
                typeof search[k] === 'object' && +search[k].min <= a[k] &&  a[k] <= +search[k].max ||
                typeof search[k] === 'function' && search[k](a[k])
            );
        });
    });
}

var data = [{ name: "Michael", age: 30, bday: "05/12/1982" }, { name: "Andy", age: 30, bday: "02/21/1992" }, { name: "Justin", age: 19, bday: "12/07/1972" }];

// serach for name with n
document.write('<pre>' + JSON.stringify(filter(data, { name: function (s) { return s.match(/n/i); } }), 0, 4) + '</pre>');

// search for age = 30
document.write('<pre>' + JSON.stringify(filter(data, { age: 30 }), 0, 4) + '</pre>');

// search for age = 30 and bday = 02/21/1992
document.write('<pre>' + JSON.stringify(filter(data, { age: 30, bday: '02/21/1992' }), 0, 4) + '</pre>');

// search for age between 18 and 20
document.write('<pre>' + JSON.stringify(filter(data, { age: { min: 18, max: 20} }), 0, 4) + '</pre>');

关于javascript - 如何对网页中具有多个不同参数的 JSON 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37186905/

相关文章:

javascript - Javascript 是编译语言还是解释语言?

javascript - jsPDF 不适用于 Safari

sql - 如何从 Hive 中的 json 字符串中提取选定的值

java - 从不同的请求返回不同的 JSON 对象

java - 合并排序算法有问题

java - 在Java中查找最小、最大和中间值

javascript - jquery鼠标悬停颜色变化

javascript - 从coldfusion中携带一组数据到jquery

json - 数组上的 Golang json 解码失败

php - 在 PHP 中使用多个条件对数组进行排序