如何在JS中使用filter方法实现去重且不额外操作数组
JavaScript filter方法实现去重输出方案
直接在原有filter方法的回调中补充去重判断即可,无需额外对数组做预处理操作,修改后的代码如下:
const test = 'This is Right'; const test1 = 'This is wrong'; const test2 = 'This is Right'; const test3 = 'The word is hello' const result = [test, test1, test2, test3].filter((value, index, arr) => // 保留真值 + 仅保留元素第一次出现的项 value && arr.indexOf(value) === index ).join(' - '); console.log(result);
运行后输出结果为:
This is Right - This is wrong - The word is hello
实现逻辑说明
filter回调函数默认支持三个入参:当前遍历值value、当前遍历下标index、被遍历的原始数组arr:
- 原有
value判断保留,用来过滤空字符串、undefined、null等假值 - 新增
arr.indexOf(value) === index判断:indexOf会返回元素在数组中第一次出现的下标,只有当前遍历下标和首次出现下标一致时才会保留该元素,自动过滤后续重复的同值元素 - 如果数组元素为引用类型(对象、数组等),仅需要把上述的等值判断替换为自定义的比对规则即可,整体代码结构不需要调整。
内容的提问来源于stack exchange,提问作者ffzefzef zefzeff
相关产品推荐
相关产品推荐

