You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular2中遍历JSON对象键的技术实现咨询

在Angular中遍历JSON对象的键值对

我来帮你解决在Angular中遍历JSON对象键的问题,结合你给出的场景和代码,分两种常用场景来讲解:

一、在组件类(TypeScript)中遍历键

从你的代码片段看,你已经尝试用Object.keys(),但写法可能有点问题。针对你拿到的list数组(每个元素是{id: "", title: ""}这样的对象),可以这样处理:

1. 获取单个对象的所有键

如果想拿到list中某一个对象的键数组,比如第一个对象:

viewPage(page, per_page){
  this._adminPage.fetchAdminPageData(page, per_page).subscribe(
    data => {
      this.list = data.list;
      this.total_item = data.total;
      this.current_page = data.current_page;
      // 当list有数据时,获取第一个对象的键
      if(this.list.length > 0) {
        this.arrayOfKeys = Object.keys(this.list[0]);
        // 此时arrayOfKeys会是 ["id", "title"]
      }
    }
  )
}

2. 遍历数组中每个对象的键

如果要逐个处理list里每个对象的键和对应值:

this.list.forEach(item => {
  // 获取当前对象的所有键
  const keys = Object.keys(item);
  console.log(`当前对象的键:${keys}`);
  
  // 进一步遍历每个键,拿到对应的值
  keys.forEach(key => {
    console.log(`${key} 对应的值是:${item[key]}`);
  });
});

二、在模板中遍历键值对(用于页面渲染)

如果需要把键和值直接渲染到页面上,Angular提供了很方便的方式:

1. 使用内置的KeyValuePipe(Angular 6.1+ 支持)

这个管道可以直接把对象转换成键值对数组,在模板中用*ngFor遍历即可:

<!-- 先遍历list数组里的每个对象 -->
<div *ngFor="let item of list" class="data-item">
  <!-- 再遍历当前对象的键值对 -->
  <div *ngFor="let kv of item | keyvalue">
    <span>*键:{{kv.key}}</span>
    <span>*值:{{kv.value}}</span>
  </div>
</div>

如果需要对键进行排序,可以在组件类中定义一个比较函数,传给KeyValuePipe:

// 组件类中定义排序函数,按键的字母顺序排列
sortKeys(a: KeyValue<string, any>, b: KeyValue<string, any>): number {
  return a.key.localeCompare(b.key);
}

然后在模板中使用:

<div *ngFor="let item of list">
  <div *ngFor="let kv of item | keyvalue:sortKeys">
    <span>*键:{{kv.key}}</span>
    <span>*值:{{kv.value}}</span>
  </div>
</div>

2. 低版本Angular兼容方案

如果你的Angular版本低于6.1,没有KeyValuePipe,可以先在组件类中把对象转换成键值对数组,再传到模板:

// 在subscribe的回调里处理
data => {
  this.list = data.list;
  // 把每个对象转换成键值对数组
  this.keyValueItems = this.list.map(item => {
    return Object.keys(item).map(key => ({key: key, value: item[key]}));
  });
}

然后模板中遍历:

<div *ngFor="let item of keyValueItems">
  <div *ngFor="let kv of item">
    <span>*键:{{kv.key}}</span>
    <span>*值:{{kv.value}}</span>
  </div>
</div>

内容的提问来源于stack exchange,提问作者Saswat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:30:36