我想了解从另一个数组的所有元素中过滤一个数组的最佳方法。我尝试了过滤功能,但它不来我如何给它的值,我想删除。喜欢的东西:
var array = [1,2,3,4];
var anotherOne = [2,4];
var filteredArray = array.filter(myCallback);
// filteredArray should now be [1,3]
function myCallBack(){
return element ! filteredArray;
//which clearly can't work since we don't have the reference <,<
}
如果过滤器函数没有用处,您将如何实现它?
编辑:我检查了可能的重复问题,这可能对那些容易理解javascript的人有用。如果答案勾选“好”,事情就简单多了。
下面的例子使用new Set()创建一个只有唯一元素的过滤数组:
数组的基本数据类型:字符串,数字,布尔,空,未定义,符号:
const a = [1, 2, 3, 4];
const b = [3, 4, 5];
const c = Array.from(new Set(a.concat(b)));
以对象为项的数组:
const a = [{id:1}, {id: 2}, {id: 3}, {id: 4}];
const b = [{id: 3}, {id: 4}, {id: 5}];
const stringifyObject = o => JSON.stringify(o);
const parseString = s => JSON.parse(s);
const c = Array.from(new Set(a.concat(b).map(stringifyObject)), parseString);
你可以写一个泛型的filterByIndex()函数,并在TS中使用类型推断来省去回调函数的麻烦:
假设你有一个数组[1,2,3,4],你想用[2,4]数组中指定的下标来过滤()。
var filtered = [1,2,3,4,].filter(byIndex(element => element, [2,4]))
byIndex函数需要元素函数和数组,如下所示:
byIndex = (getter: (e:number) => number, arr: number[]) => (x: number) => {
var i = getter(x);
return arr.indexOf(i);
}
结果就是这样
filtered = [1,3]
您可以使用过滤器,然后为过滤器函数使用过滤数组的约简,当它找到匹配时检查并返回true,然后在返回(!)时反转。filter函数对数组中的每个元素调用一次。在你的文章中,你没有对函数中的任何元素进行比较。
Var a1 = [1,2,3,4],
A2 = [2,3];
Var filter = a1.filter(函数(x) {
返回! a2。Reduce(函数(y, z) {
返回x == y || x == z || y == true;
})
});
document . write(过滤);