如何基于两个JS数组生成由动态键布尔值对象组成的新数组
实现方案
核心思路
利用ES6的计算属性名语法实现用字符串变量作为对象的键,同时将arr2转为Set提升查找效率。
完整代码
let arr1 = ['dog', 'cat', 'mouse'] let arr2 = ['dog'] // 先将arr2转Set,查找时间复杂度为O(1),性能远高于数组includes/indexOf const set2 = new Set(arr2) const arr3 = arr1.map(item => ({ // 方括号包裹变量/表达式,即为计算属性名,会将运行结果作为对象键 [item]: set2.has(item) })) console.log(arr3) // 输出 [{dog: true}, {cat: false}, {mouse: false}]
注意事项
- 箭头函数直接返回对象时,需要用括号将对象包裹,否则大括号会被识别为函数体的边界,无法正常返回对象
- 如果需要兼容不支持ES6的旧环境,可以使用传统对象赋值的写法:
let arr3 = [] for (let i = 0; i < arr1.length; i++) { let key = arr1[i] let obj = {} obj[key] = arr2.indexOf(key) !== -1 arr3.push(obj) }
内容的提问来源于stack exchange,提问作者karo-s
相关产品推荐
相关产品推荐

