对于一所学校,我正在创建一个程序,该程序使用 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/