【问题标题】:Angular Get a ramdom key from jsonAngular 从 json 中获取随机密钥
【发布时间】:2021-04-19 18:57:54
【问题描述】:

我想知道如何通过对象内部的名称获取键的值。

示例:我传递了标题“Black”的名称,它们在 json 对象中返回 pk 值“170238

api.service.ts

import { HttpClient } from "@angular/common/http";
import { Injectable } from "@angular/core";

@Injectable({
  providedIn: "root",
})
export class ApiService {
  private readonly API_URL = "xxx";
  private readonly header_job = { Authorization: "Token" };
  private parData: any = { ref_number: "4806" };
  constructor(private http: HttpClient) {}


  jobStates(ref_number: string) {
    this.parData = { ref_number };
    return this.http.get(`${this.API_URL}/combo/jobs/jobstates/?ref_number=${ref_number}`, {
      headers: { ...this.header_job },
    });
  }

API 的结果

[
    {
        "order": 0,
        "title": "Brown",
        "pk": 170231
    },
    {
        "order": 1,
        "title": "Black",
        "pk": 170238
    },
    {
        "order": 2,
        "title": "White",
        "pk": 170239
    },
    {
        "order": 3,
        "title": "Blue",
        "pk": 170240
    },
    {
        "order": 4,
        "title": "Red",
        "pk": 170241
    },
    {
        "order": 5,
        "title": "Yellow",
        "pk": 170242
    }
]

【问题讨论】:

    标签: json angular api


    【解决方案1】:

    您可以使用.find()函数获取您需要的数据

    this.apiService.jobStates(ref_number).subscribe(response => {
       const job_ref = response.find(r => r.title === title);
       if (job_ref !== undefined) {
          // set variable with job_ref.pk
       }
    });
    

    我不知道你具体想如何设置数据,所以我使用了 Observable 实现。

    myFunction() {
        getPkValueByTitle(this.ref_number, this.title).subscribe(pk => {
            // set variable with pk
        });
    }
    
    getPkValueByTitle(ref_number, title: string): Observable<any> {
        return new Observable<any>(observer => {
            this.apiService.jobStates(ref_number).subscribe(response => {
                const job_ref = response.find(r => r.title === title);
                if (job_ref !== undefined) {
                    observer.next(job_ref.pk);
                } else {
                    observer.next(null);
                }
                observer.complete();
            });
        });
    }
    

    编辑:或者您可以使用.filter() 函数仅返回您需要的内容。请注意,这是未经测试的代码,因此可能需要一些调整

      jobStates(ref_number: string, title: string) {
        this.parData = { ref_number };
        return this.http.get(`${this.API_URL}/combo/jobs/jobstates/?ref_number=${ref_number}`, {
          headers: { ...this.header_job },
        }).filter(value => value.title === title);
      }
    

    【讨论】:

    • 我在“对象”类型上不存在属性“查找”错误。ts(2339)
    • @ialexsilva 你让它工作了吗? find 应该适用于您作为 api 结果提供的数组。
    • 是的,我在 es5 上声明了 find 属性
    猜你喜欢
    • 2015-03-08
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多