/**
var find = function(data) { // your code are here...
}
var result = find(data).where({ 'title': /\d$/ }).orderBy('userId', 'desc');
console.log(result);// [{ userId: 19, title: 'title2'}, { userId: 8, title: 'title1' }];
要实现 find
函数,使得后续的调用能够正确执行,我们需要确保 find
函数返回一个对象,该对象具有 where
和 orderBy
方法。以下是一个可能的实现:
var find = function(data) {
// 返回一个对象,包含 where 和 orderBy 方法
return {
where: function(criteria) {
// 过滤数据,符合 criteria 的项
const filteredData = data.filter(item => {
// 检查每个条件
return Object.keys(criteria).every(key => {
// 如果是正则表达式,使用 test 方法
if (criteria[key] instanceof RegExp) {
return criteria[key].test(item[key]);
}
// 否则直接比较
return item[key] === criteria[key];
});
});
// 返回一个新的对象,继续链式调用
return {
data: filteredData,
orderBy: this.orderBy
};
},
orderBy: function(key, order) {
// 对数据进行排序
const sortedData = this.data.sort((a, b) => {
if (order === 'asc') {
return a[key] - b[key];
} else {
return b[key] - a[key];
}
});
return sortedData;
}
};
};
// 示例数据
var data = [
{ userId: 19, title: 'title2' },
{ userId: 8, title: 'title1' },
{ userId: 5, title: 'title3' },
{ userId: 12, title: 'title4' }
];
// 调用 find 函数
var result = find(data).where({
'title': /\d$/
}).orderBy('userId', 'desc');
console.log(result); // [{ userId: 19, title: 'title2'}, { userId: 8, title: 'title1' }];
where
和 orderBy
方法。criteria
,使用 Array.prototype.filter
方法过滤数据。对于每个条件,检查数据项是否符合条件。key
和 order
(升序或降序)进行排序。这样实现后,调用 find(data).where({...}).orderBy(...)
的链式调用就能正常工作,返回符合条件的排序结果。