MST

星途 面试题库

面试题:JavaScript数组创建复杂场景下的优化

假设你要创建一个数组,该数组的元素是由另一个对象数组中的特定属性值组成,同时要保证新数组中元素的唯一性,并且在大数据量下具有较好的性能,请给出优化后的代码实现及思路分析。
30.3万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

思路分析

  1. 首先,我们需要从原对象数组中提取特定属性值。
  2. 然后,为了保证新数组元素的唯一性,可以使用 Set 数据结构,Set 中的值具有唯一性。
  3. 对于大数据量,使用 Set 来处理唯一性比传统的循环判断更高效,因为 Set 内部采用哈希表实现,添加元素的时间复杂度接近 O(1)。

代码实现(以 JavaScript 为例)

function createUniqueArrayFromObjectArray(objectArray, property) {
    return Array.from(new Set(objectArray.map(obj => obj[property])));
}

// 示例用法
const originalArray = [
    { id: 1, name: 'Alice' },
    { id: 2, name: 'Bob' },
    { id: 3, name: 'Alice' }
];
const newArray = createUniqueArrayFromObjectArray(originalArray, 'name');
console.log(newArray); 

在上述代码中:

  1. objectArray.map(obj => obj[property]) 从原对象数组 objectArray 中提取指定 property 的值,形成一个新数组。
  2. new Set(...) 将这个新数组转换为 Set,自动去除重复值。
  3. Array.from(...) 再将 Set 转换回数组,以满足题目要求的数组形式。

其他语言类似思路实现(以 Python 为例)

def create_unique_array_from_object_array(object_array, property):
    return list(set([obj[property] for obj in object_array]))

# 示例用法
original_array = [
    {'id': 1, 'name': 'Alice'},
    {'id': 2, 'name': 'Bob'},
    {'id': 3, 'name': 'Alice'}
]
new_array = create_unique_array_from_object_array(original_array, 'name')
print(new_array) 

在 Python 代码中,通过列表推导式 [obj[property] for obj in object_array] 提取属性值,然后用 set 去除重复值,最后转换回列表。