-
Notifications
You must be signed in to change notification settings - Fork 0
/
for-each.ts
58 lines (55 loc) · 1.26 KB
/
for-each.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/**
* @packageDocumentation
* @module @tomato-js/shared
*/
import { isArray, isObject } from "./is-type";
import { ObjectType, Eachable } from "./types";
function forEachArray(elements: any[], func: (k: any, v: any) => any) {
let rst;
for (let i = 0, len = elements.length; i < len; i++) {
rst = func(i, elements[i]);
if (rst === false) {
break;
}
}
}
function forEachObject(elements: ObjectType<any>, func: (k: any, v: any) => any) {
let rst;
for (const k in elements) {
if (elements.hasOwnProperty(k)) {
rst = func(k, elements[k]);
if (rst === false) {
break;
}
}
}
}
/**
* 遍历对象或数组
*
* 脚本举例
* ```
* import { forEach } from '@tomato-js/shared'
* const obj = {
* a: 1,
* b: 2
* };
* const obj2 = {};
* const arr = [1,2,3,4,5];
* forEach(obj, (k, v) => (obj2[v] = k));
* forEach(obj, (k, v) => console.log(v));
* ```
*
* @param elements - 需要遍历的值
* @param func - 执行函数
*/
export function forEach(elements: Eachable<any>, func: (k: any, v: any) => any) {
if (!elements) {
return;
}
if (isArray(elements)) {
forEachArray(elements as Array<any>, func);
} else if (isObject(elements)) {
forEachObject(elements, func);
}
}