Comments (3)
function find(array) {
return new S(data);
}
function S(data) {
this.data = data;
this.filters = {};
this.orderings = [];
}
S.prototype.where = function (query) {
this.filters = Object.assign(
{},
this.filters,
Object.keys(query).reduce(
// 这里要处理null等特殊值
(a, c) => ((a[c] = (d) => query[c].test(d[c])), a),
{}
)
);
return this;
};
S.prototype.orderBy = function (field, desc = "desc") {
this.orderings.push((a, z) =>
desc == "desc" ? z[field] - a[field] : a[field] - z[field]
);
this.data = this.data.filter((d) =>
Object.keys(this.filters).every((key) => this.filters[key](d))
);
this.orderings.forEach((o) => {
this.data = this.data.sort(o);
});
return this.data;
};
from interview.
function find (origin) {
return {
where: function (obj) {
let r = []
r = origin.filter(item => {
return item.title !== null && item.title.toString().search(obj.title) > -1
})
return {
orderBy: function (field, orderTyep = 'desc') {
let oo = {}
r.map(o => {
oo[o[field]] = o
})
let result = []
Object.keys(oo).sort((a, b) => orderTyep === 'desc' ? b - a : a - b).forEach(i => { result.push(oo[i]) })
return result
}
}
}
}
}
from interview.
function find(array) {
let data = [...array]
data.__proto__.where = (obj) => {
if (data.length == 0) return []
Object.keys(obj).forEach((key) => {
// 写法不太优雅,待完善
if (!data[0].hasOwnProperty(key)) {
data = []
} else {
data = data.filter((s) => obj[key].test(s[key]))
}
})
return data
}
data.__proto__.orderBy = (key, sortMode) => {
if (data.length == 0 || !data[0].hasOwnProperty(key)) return []
return data.sort((x, y) => {
return sortMode != 'desc' ? x[key] - y[key] : y[key] - x[key]
})
}
return data
}
同时支持了
find(args)
.where()
.where()
.orderBy()
from interview.
Related Issues (20)
- Day388:实现一个sum函数,接收一个arr,累加arr的项,只能使用add方法,该方法接收两个数,模拟异步请求后端返回一个相加后的值?
- Day389:实现二进制与十进制的互相转化的两个函数? HOT 1
- Day390:下面的代码有什么问题?怎么优化? HOT 1
- Day391:css 的渲染层合成是什么? 浏览器如何创建新的渲染层?
- Day392:webpack中的hash、chunkhash、contenthash区别?(百度)
- Day394:SSR 怎么做的,怎么保证同构?server 端的数据都 renderToString 了,为什么还要给到 client 端?
- Day395:vue-router 中路由方法 pushState 和 replaceState 能否触发 popSate 事件?
- Day396:为什么 vite、snowpack 可以比 webpack 快那么多?具体原理是什么?(阿里)
- Day397:手写 Vue.extend 实现?
- Day398: 怎么在指定数据源里面生成一个长度为 n 的不重复随机数组 能有几种方法 时间复杂度多少(字节)
- Day399: 如何找到数组中第一个没出现的最小正整数 怎么优化(字节)
- Day400:判断括号字符串是否有效(小米) HOT 1
- Day401:实现一个数字加减法功能(腾讯) HOT 1
- Day402: 实现一个render(str,parameter)方法,将str中的占位符用parameter填充?(腾讯) HOT 1
- Day403: 有一个二叉树,每个节点的值是一个正整数。写一个函数判断这棵树中是否存在从根到叶子节点的一个路径,这个路径上所有的节点之和为某个节点的值?
- Day404: 实现一个获取对象任意属性的方法?(字节) HOT 1
- Day405: 顺时针打印矩阵(美团)
- Day406: 写个函数,判断一个字符串是否为手机靓号?(腾讯)
- Day407: 有一堆整数,请把他们分成三份,确保每一份和尽量相等(11,42,23,4,5,6 4 5 6 11 23 42 56 78 90) HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from interview.