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

JavaScript循环仅返回最后一条结果:如何获取完整谷歌联系人列表?

问题分析与修复方案

核心问题

  1. 存储容器错误:你把contactsjson定义成单个对象{},每次循环都会用新联系人的数据覆盖它,最终只保留最后一条记录。
  2. 多余循环无效赋值:内层的for (var j = 0; j < id.length; j++)完全没必要——id是联系人的唯一ID字符串,这个循环会重复把同一个联系人数据赋值给contactsjson多次,毫无意义且加重逻辑混乱。

修改后的代码

function contactsJSON() {
  // 改为数组存储所有联系人
  var contactsjson = [];
  var myContacts = ContactsApp.getContactGroup('System Group: My Contacts').getContacts();
  
  for (var i = 0; i < myContacts.length; i++) {
    var id = myContacts[i].getId();
    var name = myContacts[i].getFullName();

    var emailsobj = myContacts[i].getEmails();
    var email = {};
    for (var j = 0; j < emailsobj.length; j++) {
      email[emailsobj[j].getAddress().toLowerCase()] = 1;
    }

    var phonesobj = myContacts[i].getPhones();
    var phone = {};
    for (var j = 0; j < phonesobj.length; j++) {
      phone[phonesobj[j].getPhoneNumber().replace(/[_)(\s.-]/g, '')] = 1;
    }

    // 将当前联系人对象推入数组,而非覆盖整个容器
    contactsjson.push({ id: id, name: name, phone: phone, email: email });
  }

  // 若需导出JSON字符串,直接返回JSON.stringify(contactsjson)即可
  Logger.log(contactsjson);
  return contactsjson;
}

关键修改点说明

  • 将contactsjson初始化为数组[],用于存放所有联系人对象
  • 移除无意义的id.length循环
  • 使用push()方法将每个联系人的对象添加到数组中,避免覆盖数据
  • 去掉多余的JSON.stringify再JSON.parse操作:如果需要最终导出JSON字符串,直接返回JSON.stringify(contactsjson);若需对象数组,直接返回数组即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 07:18:19