如何匹配字符串数组与对象数组,生成指定顺序的结果数组?
解决方案
要高效实现需求,推荐先把array2转换成键值映射结构,再遍历array1生成目标数组,避免重复查找、提升性能。
方法一:使用Map(推荐)
let array1 = ['value1', 'value2', 'value3', 'value4', 'value5']; let array2 = [ { property1: 'value1', property2: 42, property3: 'some other value' }, { property1: 'value3', property2: 342, property3: 'some other value' }, { property1: 'value5', property2: 422, property3: 'some other value' } ]; // 构建property1到property2的映射 const valueMap = new Map(array2.map(item => [item.property1, item.property2])); // 生成array3 const array3 = array1.map(val => valueMap.get(val) || 0); console.log(array3); // 输出: [42, 0, 342, 0, 422]
方法二:使用普通对象
如果property1的值都是合法对象键(无特殊字符),也可以用普通对象实现:
const valueObj = {}; array2.forEach(item => { valueObj[item.property1] = item.property2; }); // 若property2可能为0,建议用??替代||,语义更准确(仅在值为undefined/null时返回0) const array3 = array1.map(val => valueObj[val] ?? 0);
说明
- 映射结构将
array2的查找时间从O(n)降到O(1),元素较多时性能提升明显。 map方法严格遵循array1的遍历顺序,保证array3的顺序与array1完全一致。- 若
property2可能出现0、空字符串等假值,??(空值合并运算符)比||更安全,不会误判合法假值。
内容的提问来源于stack exchange,提问作者JackOrlen
相关产品推荐
相关产品推荐

