nocobase/packages/core/utils/src/getValuesByPath.ts
被雨水过滤的空气-Rairn c02544c68b
fix(FilterFormBlock): fix association field can not to filter (#1699)
* feat: add getValuesByPath

* fix(FilterFormBlock): fix association field can not to filter

* test: hasMany filter test

* fix: remove null in filter

* fix: fix not responding for filter button

* fix: fix oho and o2m and obo

* fix: fix isInFilterFormBlock

* fix: fix errors

* fix: should filter out when params is empty

---------

Co-authored-by: chareice <chareice@live.com>
2023-04-19 23:06:20 +08:00

33 lines
806 B
TypeScript

export const getValuesByPath = (obj: object, path: string, defaultValue?: any) => {
if (!obj) {
return defaultValue;
}
const keys = path.split('.');
let result: any[] = [];
let currentValue = obj;
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
if (Array.isArray(currentValue)) {
for (let j = 0; j < currentValue.length; j++) {
const value = getValuesByPath(currentValue[j], keys.slice(i).join('.'), defaultValue);
result = result.concat(value);
}
break;
}
currentValue = currentValue[key] === undefined ? defaultValue : currentValue[key];
if (currentValue == null) {
break;
}
if (i === keys.length - 1) {
result.push(currentValue);
}
}
return result.length === 1 ? result[0] : result;
};