SOURCE

// 实现一个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 命令行工具 X clear

                    
>
console