// 实现一个find函数,并且find函数能够满足下列条件
// title数据类型为string|null
// userId为主键,数据类型为number
// 原始数据
const data = [
{ userId: 8, title: 'title1' },
{ userId: 11, title: 'other' },
{ userId: 15, title: null },
{ userId: 19, title: 'title2' }
];
// function find(origin) {
// return {
// data: origin,
// where: function(searchObj) {
// const keys = Reflect.ownKeys(searchObj)
// for (let i = 0; i < keys.length; i++) {
// this.data = this.data.filter(item => searchObj[keys[i]].test(item[keys[i]]))
// }
// return find(this.data)
// },
// orderBy: function(key, sorter) {
// this.data.sort((a, b) => {
// return sorter === 'desc' ? b[key] - a[key] : a[key] - b[key]
// })
// return this.data
// }
// }
// }
let find = {
data,
setData(obj) {
this.data = obj;
return this
},
where(obj) {
const keys = Reflect.ownKeys(obj);
let len = keys.length;
for (let i = 0; i < len; i++) {
this.data = this.data.filter(item =>
obj[keys[i]].test(item[keys[i]])
)
}
return find;
},
orderBy(key, sorter) {
this.data.sort((a, b) =>
sorter === 'desc' ? b[key] - a[key] : a[key] - b[k]
)
return find;
}
}
// 查找data中,符合条件的数据,并进行排序
const result = find.setData(data).where({
"title": /\d$/
}).orderBy('userId', 'desc');
console.log(result.data)
// 输出
// [{ userId: 19, title: 'title2'}, { userId: 8, title: 'title1' }];
console