需求
给出一个类数组,删除要求的重复数据,返回新数组
destroyer([1, 2, 3, 1, 2, 3], 2, 3) should return [1, 1]
destroyer([2, 3, 2, 3], 2, 3) should return []
destroyer(["tree", "hamburger", 53], "tree", 53) should return ["hamburger"]
思路1
1.类数组转化成数组
2.双重循环比较两个数组的元素
3.删除重复数据
4.剔除非Boolean数据
function destroyer(arr) {
var args = Array.from(arguments).slice(1);
for(var i=0; i<arr.length; i++) {
for(var j=0; j<args.length; j++) {
if(arr[i] === args[j]) {
delete arr[i];
}
}
}
return arr.filter(Boolean);
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
思路2
1.类数组转化成数组
2.fiter()方法返回不重复数组
function destroyer(arr) {
var args = Array.from(arguments).slice(1);
return arr.filter((val) => !args.includes(val));
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
相关
arguments(类数组转换成数组),以下方法都可以
let args = Array.prototype.slice.call(arguments);
let args = [].slice.call(arguments);
let args = Array.from(arguments);
let args = [...arguments];
arr.filter(callback[, thisArg])
- filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
参数:
- callback
用来测试数组的每个元素的函数。调用时使用参数 (element, index, array)。返回true表示保留该元素(通过测试),false则不保留。 - thisArg
可选。执行 callback 时的用于 this 的值。 - 返回值
一个新的通过测试的元素的集合的数组
描述:
- filter 为数组中的每个元素调用一次 callback 函数,并利用所有使得 callback 返回 true 或 等价于 true 的值 的元素创建一个新数组。callback 只会在已经赋值的索引上被调用,对于那些已经被删除或者从未被赋值的索引不会被调用。那些没有通过 callback 测试的元素会被跳过,不会被包含在新数组中。
有其他好的方法或思路的道友,不妨在沙发区神交一番。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。