UNPKG

1.44 kBJavaScriptView Raw
1var helperDeleteProperty = require('./helperDeleteProperty')
2
3var isFunction = require('./isFunction')
4var isArray = require('./isArray')
5var each = require('./each')
6var arrayEach = require('./arrayEach')
7var lastEach = require('./lastEach')
8var clear = require('./clear')
9var eqNull = require('./eqNull')
10
11function pluckProperty (name) {
12 return function (obj, key) {
13 return key === name
14 }
15}
16
17/**
18 * 移除对象属性
19 *
20 * @param {Object/Array} obj 对象/数组
21 * @param {Function/String} iterate 方法或属性
22 * @param {Object} context 上下文
23 * @return {Object/Array}
24 */
25function remove (obj, iterate, context) {
26 if (obj) {
27 if (!eqNull(iterate)) {
28 var removeKeys = []
29 var rest = []
30 if (!isFunction(iterate)) {
31 iterate = pluckProperty(iterate)
32 }
33 each(obj, function (item, index, rest) {
34 if (iterate.call(context, item, index, rest)) {
35 removeKeys.push(index)
36 }
37 })
38 if (isArray(obj)) {
39 lastEach(removeKeys, function (item, key) {
40 rest.push(obj[item])
41 obj.splice(item, 1)
42 })
43 } else {
44 rest = {}
45 arrayEach(removeKeys, function (key) {
46 rest[key] = obj[key]
47 helperDeleteProperty(obj, key)
48 })
49 }
50 return rest
51 }
52 return clear(obj)
53 }
54 return obj
55}
56
57module.exports = remove