gpt4 book ai didi

javascript - 数组中嵌套对象的 Angular 递归函数

转载 作者:行者123 更新时间:2023-11-30 10:57:55 24 4
gpt4 key购买 nike

我正在为以下结构构建自定义过滤器管道

[
{
"client": {
"name": "DJASLDJSAKL"
},
"job_status": {
"name": "Scheduled"
},
"descriptor": "Lorem ipsum dolor sit amet consectetur adipiscing elit lacinia quam, ultrices leo interdum senectus integer ultricies venenatis nisl libero, et tellus nec litora volutpat proin duis neque. \r\n\r\nUt metus ac enim mauris malesuada bibendum lectus tincidunt nascetur phasellus, tristique quam libero purus dapibus nisl ultricies urna. \r\n\r\nNisl cubilia donec imperdiet nisi tempus venenatis cras egestas, duis senectus at orci ad porttitor in, magnis suspendisse sem ullamcorper neque tincidunt etiam.\r\n\r\nLitora pulvinar viverra et velit felis massa commodo etiam la.\r\n",
"duracion": {
"text": "00:00:00"
},
"tech": {
"eta_promise_date": "Nov 20 2019 03:05:00:PM"
},
"siteAddress": "537 West Thomas Drive Rolling Meadows, IL 60008"
}
]

我首先制作了一个只能在第一级或顶级工作的功能。搜索我有一个想法,但同时我有点迷路,这就是我工作的方法

  findObject(obj, searchTerm){
Object.keys(obj).forEach((key) => {
//let r = RegExp(searchTerm, 'gi').test(obj[key]);
if(obj === searchTerm){
console.log(`key: ${key}, value: ${obj[key]}`);
if(typeof obj[key] === 'object'){
this.findObject(obj[key], searchTerm);
}
return null;
}return null;

});
}

但是我现在遇到了一个无限循环

编辑 添加 View 部分

    <ion-list *ngFor="let order of workOrders | filtro: searchTerm">
<ion-item *ngFor = "let location of order.site" (click)="showOrderLocation(order)">
<ion-icon name="pin" item-start [ngStyle]="{'color':order.job_status.color}"></ion-icon>
<h4>{{order.code}}</h4><br>
<p>{{order.job_status.name}}</p><br>
<small>ETA: {{order.etaPromise}}</small><br>
<small>Deadline: {{this.relativeDate(this.utcToLocalTime(order.tech.eta_promise_date))}}</small><br>
<p>{{order.descriptor}}</p>
</ion-item>
</ion-list>

最佳答案

你的递归函数有点乱。 findObject 函数应根据对象的属性是否与 searchTerm 匹配返回一个 boolean

使用 Object.keys(obj).forEach 来迭代值是个坏主意,因为它会阻止您中断递归,因此请改用简单的 for 循环。在你的情况下,有两种情况你想中断递归:如果字符串属性包含 searchTerm 或者如果嵌套对象匹配 searchTerm

findObject(obj, searchTerm){
let pattern = new RegExp(searchTerm, 'gi');
const values = Object.values(obj)

for (let value of values) {
if (typeof value === 'string') {
// if value i a string, check if it matches!
if (pattern.test(value)) {
// match!
return true
}
} else if (typeof value === 'object') {
// use recursion to check if nested object contains the search term
const isMatch = this.findObject(value, searchTerm);
if (isMatch) {
return true
}
}
}

// no match, so return false
return false
}

关于javascript - 数组中嵌套对象的 Angular 递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59250885/

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