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

如何匹配字符串数组与对象数组,生成指定顺序的结果数组?

解决方案

要高效实现需求,推荐先把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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:45:39