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

如何从对象数组提取去重州名数组?原代码返回字符数组问题

解决方案

你的代码问题出在错误地对单个州名字符串使用了Set。字符串是可迭代对象,当你把单个州名(比如"Ohio")传入new Set()时,它会把字符串拆成单个字符(['O','h','i','o']),这就是为什么你得到的是字符数组,而且完全没实现全局去重——你是在循环里每次只处理一个州就去重,根本没收集所有州名再统一处理。

修改思路:

  1. 先遍历所有客户对象,把所有州名收集到一个数组里
  2. 再对这个完整的州名数组使用Set去重,最后转回数组

修改后的代码(基于原循环改造):

const arrayOfCustomerObjects = [{
  "profile": {
    "name": {
      "first": "Lucille",
      "last": "Bradshaw"
    },
    "address": {
      "line1": "91 Juliana Place",
      "line2": "Apt 226",
      "city": "Homeworth",
      "state": "Ohio"
    }
  }
}, {
  "profile": {
    "name": {
      "first": "John",
      "last": "Doe"
    },
    "address": {
      "line1": "123 Main St",
      "city": "Columbus",
      "state": "Ohio"
    }
  }
}];

function getUniqueListOfAllCustomerStates(data) {
  let stateArray = [];
  // 第一步:收集所有州名
  for (let i = 0; i < data.length; i++) {
    // 可选:加个判断避免找不到属性报错
    if (data[i]?.profile?.address?.state) {
      stateArray.push(data[i].profile.address.state);
    }
  }
  // 第二步:对所有州名去重
  return [...new Set(stateArray)];
}

console.log(getUniqueListOfAllCustomerStates(arrayOfCustomerObjects)); // 输出 ["Ohio"]

更简洁的写法(使用数组方法):

如果习惯函数式写法,可以用map提取州名,再用Set去重:

function getUniqueListOfAllCustomerStates(data) {
  const allStates = data
    .filter(customer => customer?.profile?.address?.state) // 过滤无效项
    .map(customer => customer.profile.address.state);
  return [...new Set(allStates)];
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:15:18