gpt4 book ai didi

javascript - 按父实体和虚线路径列出的实体列表

转载 作者:行者123 更新时间:2023-12-03 02:09:33 25 4
gpt4 key购买 nike

我正在使用 Angular 5 + Breeze JS + Breeze-bridge2-Angular。

假设我们有一个 Company 实体,它具有多个 Address 类型的导航属性,而 Address 实体类型本身又具有一些导航属性,例如国家/地区等:

import { Entity } from "breeze-client"; // From https://www.npmjs.com/package/breeze-client package 

export class Company implements Entity {
billingAddress: Address;
shippingAddress: Address;
}

export class Address implements Entity {
country1: Country;
country2: Country;
}

export class Country implements Entity {
...
}

所有实体均已查询到EntityMnager,无需从服务器查询任何内容。

如何实现一个方法(可能使用我迄今为止缺少的一些 Breeze JS API) 采用父 Company 实体和 string[] 点属性路径并返回一个平面 Entity[] 列表,其中包含父实体和使用这些点路径定位的所有子实体?

虚线路径与我们在 Breeze 查询中使用 expand() 方法相同(请参阅虚线展开路径 here ),即:

const company: Company = ...; // Query Company and its children into EntityManager
const paths: string[] = [
"billingAddress",
"shippingAddress",
"billingAddress.country1",
"billingAddress.country2"];

getEntitiesFlat(entity: Entity, paths: string[]): Entity[] {
// Not sure how to implement getChildren() method below
const childEntities: Entity[] = this.getChildren(entity, paths);

return [entity].concat(childEntities);
}

顺便说一句,我正在尝试实现父实体及其特定子实体的删除,以上是迄今为止我受 DevForce 框架启发而提出的最简洁的方法。非常欢迎更好的想法。

最佳答案

不太确定您在寻找什么。真的。假设您正在采用 path 并将这些路径映射到 entity 对象...我想出了:

function getByPath(entity: any, path: string) {
if (!entity) return undefined

const parts = path.split(".")

if (parts.length === 1) {
return entity[path]
}

return getByPath(entity[parts[0]], parts.slice(1).join("."))
}

使用类似

const paths = ["a", "a.b.c", "a.b.d", "d", "c", "d.c"]
const entity = {
a: { b: { c: 1 } },
b: 1,
c: 2
}

paths.map(path => getByPath(entity, path)) // [ { b: { c: 1 } }, 1, undefined, undefined, 2, undefined ]

编辑:如果您已经使用 lodash,只需使用 lodash#get

关于javascript - 按父实体和虚线路径列出的实体列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49638220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com