如何简化数组转特定结构对象的函数?无法满足无对应key返回条件
解决数组转换函数的键存在性判断问题
你的核心问题是原函数无法区分「键不存在」和「键存在但值为undefined」的情况,导致不符合「key不在数组对象的键中时返回仅含_${key}s: []的对象」的要求。下面是修正并优化后的函数,同时满足所有限制条件:
function transformArray(array, key) { // 处理array为null/undefined的边界情况 if (array == null) return "(((Not data)))"; const result = {}; const keyArray = []; for (const item of array) { // 严格检查当前对象自身是否包含目标key(排除继承属性) if (!item.hasOwnProperty(key)) { return { [`_${key}s`]: [] }; } const value = item[key]; const stringKey = String(value); result[stringKey] = item; keyArray.push(stringKey); } // 添加集合属性并返回结果 result[`_${key}s`] = keyArray; return result; }
关键修正点说明:
- 修正数组空值判断:原代码
array == null || undefined写法错误,实际等价于array == null,优化后直接用array == null清晰处理null和undefined的情况。 - 区分键不存在与值为undefined:用
item.hasOwnProperty(key)严格判断键是否存在于对象自身,避免把「键存在但值为undefined」的情况误判为键不存在。 - 提前终止不符合条件的情况:遍历过程中只要发现任意一个对象不含目标key,立即返回要求的结构,无需继续遍历,保证O(n)时间复杂度。
- 单次遍历完成所有操作:遍历一次数组同时完成键存在性检查、结果对象构建、key数组收集,避免原代码中额外的
map遍历,优化性能。
符合所有限制条件验证:
- 时间复杂度O(n):仅遍历数组一次,所有操作都是O(1)级别的。
- 数组为null/undefined时不报错:直接返回指定字符串。
- key不存在时返回正确结构:只要有一个对象不含目标key,立即返回
{ _${key}s: [] }。 - 支持所有指定值类型:用
String()转换string/number/null/undefined/boolean类型的键值,符合要求。
内容的提问来源于stack exchange,提问作者Kamal
相关产品推荐
相关产品推荐

