如何获取两个JavaScript数组中的匹配值?
获取两个数组匹配值的最佳方式
1. 获取所有匹配值(替代find)
你的当前代码用array1.find(...)只会返回第一个匹配的元素,如果要获取所有匹配项,应该使用filter方法:
var array1 = ["2023/03/07", "2023/03/17", "2023/03/27"]; var array2 = []; var startDate = "2023/03/05"; var endDate = "2023/03/15"; var dateMove = new Date(startDate); const endDateObj = new Date(endDate); // 生成日期范围数组(修正重复声明strDate的问题) while (dateMove < endDateObj) { var strDate = dateMove.toISOString().slice(0, 10); array2.push(strDate); dateMove.setDate(dateMove.getDate() + 1); } // 获取所有匹配值 const matches = array1.filter(val => array2.includes(val)); console.log(matches); // 输出: ["2023/03/07"]
2. 性能优化(大数据量场景)
如果数组元素较多,array2.includes(val)的时间复杂度为O(n),可以把array2转换成Set,将查询时间降到O(1),提升效率:
const array2Set = new Set(array2); const matches = array1.filter(val => array2Set.has(val));
3. 日期比较的严谨性提示
原代码用字符串比较strDate < endDate在格式统一(YYYY/MM/DD)的情况下可行,但更严谨的方式是直接比较Date对象,避免因格式不一致导致的错误,比如上面代码中改用dateMove < endDateObj作为循环条件。
内容的提问来源于stack exchange,提问作者Đoàn Hiếu
相关产品推荐
相关产品推荐

