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

如何根据条件过滤原数组并生成新数据结构的键值对集合?

解决方案

你可以结合数组方法同时完成过滤和结构转换,这里提供两种常用实现方式:

方法一:用reduce一步完成(高效简洁)

reduce能在遍历数组的同时完成过滤与对象构建,无需额外中间数组:

const users = [
{id: 1, name: 'userOne', age: 23, licenseNumber: '95273380'},
{id: 2, name: 'userTwo', age: 21, licenseNumber: '95273381'},
{id: 3, name: 'userThree', age: 18, licenseNumber: ''},
{id: 4, name: 'userFour', age: 2, licenseNumber: '95273382'},
{id: 5, name: 'userFive', age: 77, licenseNumber: null},
{id: 6, name: 'userSix', age: 35, licenseNumber: '95273383'},
];

const licenseToName = users.reduce((acc, user) => {
  // 过滤掉licenseNumber为空字符串或null的用户
  if (user.licenseNumber !== '' && user.licenseNumber !== null) {
    acc[user.licenseNumber] = user.name;
  }
  return acc;
}, {});

console.log(licenseToName);
// 输出:
// {
//   '95273380': 'userOne',
//   '95273381': 'userTwo',
//   '95273382': 'userFour',
//   '95273383': 'userSix'
// }

方法二:filter + Object.fromEntries(可读性更强)

先通过filter筛选有效用户,再用map转成[键, 值]格式的数组,最后用Object.fromEntries生成目标对象:

const validUsers = users.filter(user => 
  user.licenseNumber !== '' && user.licenseNumber !== null
);

const licenseToName = Object.fromEntries(
  validUsers.map(user => [user.licenseNumber, user.name])
);

console.log(licenseToName);
// 输出与上面一致

关键说明

  • 两种方法都能满足需求:先过滤无效数据,再构建键值对结构
  • reduce仅遍历数组一次,性能更优;filter+map逻辑拆分清晰,新手更容易理解
  • 过滤条件明确判断!== ''和!== null,避免误过滤其他假值(比如0或undefined,如果数据集存在这类情况)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:01:16