手写loadsh函数的第二天
<script>
const arr = [3.1, 2.2, 1.3];
// 定义一个函数 differenceBy,用于计算两个数组的差异,通过给定的 identity 函数进行元素比较
function differenceBy(array, values, identity) {
let newArr = [];
// 遍历第一个数组 array 中的每个元素
for (const el of array) {
// 检查对象的值是否为空数组(这里似乎有误,应该是检查对象的值不为空数组)
if (Object.values(el) != []) {
// 通过 identity 函数获取当前元素的标识值
const item = identity(el);
// 将标识值添加到新数组中
newArr.push(item);
}
}
// 遍历第二个数组 values 中的每个元素
for (const el of values) {
// 通过 identity 函数获取当前元素的标识值
const item1 = identity(el);
// 从新数组中过滤掉与当前标识值相等的元素
newArr = newArr.filter((item) => {
return item !== item1;
});
}
// 将两个数组的值合并为一个新数组
const arrayValues = [...array, ...values];
// 遍历合并后的数组中的每个元素
arrayValues.forEach((item) => {
// 遍历新数组中的每个元素
newArr.forEach((item1) => {
// 如果当前元素与新数组中的元素通过 identity 函数比较相等
if (identity(item) == item1) {
// 将当前元素添加到新数组中
newArr.push(item);
// 从新数组中过滤掉与当前元素标识值相等的元素
newArr = newArr.filter((item) => {
return item !== item1;
});
}
});
});
// 返回经过差异计算后的新数组
return newArr;
}
// 调用 differenceBy 函数,传入数组 arr、[2.3, 2.5],以及 Math.floor 函数作为标识函数
console.log(differenceBy(arr, [2.3, 2.5], Math.floor));
</script>
使用chantgpt优化过的代码
const arr = [3.1, 2.2, 1.3];
// 定义函数 differenceBy,用于计算数组差异
function differenceBy(array, values, identity) {
// 使用 Set 存储唯一的标识值
const uniqueValues = new Set(values.map(identity));
// 使用 filter 方法过滤掉在 values 数组中出现的元素
return array.filter((item) => !uniqueValues.has(identity(item)));
}
// 调用 differenceBy 函数,传入数组 arr、[2.3, 2.5],以及 Math.floor 函数作为标识函数
console.log(differenceBy(arr, [2.3, 2.5], Math.floor));
//在这里实在是没有想到这种办法,不过也算是学到了点什么,看来还有待进步