为嵌套子文档添加基于布尔条件的available字段
为嵌套数组中的每个prop添加available字段
现有如下结构的数组数据:
const fruits = [ { "name": "Orange", "variants": [ { "color": "orange", "props": [] } ] }, { "name": "Banana", "variants": [ { "color": "green", "props": [ { "uid": 1, "grade": 3 }, { "uid": 2, "grade": 5 }, { "uid": 3, "grade": 7 } ] } ] } ];
以及一个可用uid数组:
const available_props = [1,2];
需求是为每个variant下的props数组中的每个prop对象添加available字段,字段值取决于当前prop的uid是否存在于available_props数组中。
解决方案
通过嵌套遍历数组对象实现,为提升查找效率,先将available_props转换为Set(查找时间复杂度从O(n)降至O(1)):
// 转换为Set提升查找效率 const availableSet = new Set(available_props); // 处理数据(纯函数方式,不修改原数据) const result = fruits.map(fruit => ({ ...fruit, variants: fruit.variants.map(variant => ({ ...variant, props: variant.props.map(prop => ({ ...prop, available: availableSet.has(prop.uid) })) })) })); console.log(result);
输出结果
[ { "name": "Orange", "variants": [ { "color": "orange", "props": [] } ] }, { "name": "Banana", "variants": [ { "color": "green", "props": [ { "uid": 1, "grade": 3, "available": true }, { "uid": 2, "grade": 5, "available": true }, { "uid": 3, "grade": 7, "available": false } ] } ] } ]
代码说明
- 使用
map方法遍历数组,通过对象扩展运算符...保留原有属性,避免修改原始数据 - 转换
available_props为Set,在数据量较大时能显著提升查找性能
内容的提问来源于stack exchange,提问作者Lucien Chardon
相关产品推荐
相关产品推荐

