Javascript 比较和过滤两个阵列
我一直在尝试实现一个函数,其中包含两个数组 array1的元素用作过滤array2中元素的条件 例如:Javascript 比较和过滤两个阵列,javascript,arrays,loops,filter,array-splice,Javascript,Arrays,Loops,Filter,Array Splice,我一直在尝试实现一个函数,其中包含两个数组 array1的元素用作过滤array2中元素的条件 例如: array1= [apple, grapes, oranges] array2= [potato, pears, grapes, berries, apples, oranges] 传入函数后,array2应具有以下元素: filter_twoArrays(array1,array2) array2= [grapes, apples, oranges] 我尝试了以下代码,使用for循环
array1= [apple, grapes, oranges]
array2= [potato, pears, grapes, berries, apples, oranges]
传入函数后,array2应具有以下元素:
filter_twoArrays(array1,array2)
array2= [grapes, apples, oranges]
我尝试了以下代码,使用for循环和array.splice(),但我看到的问题是,当我使用splice方法时,它似乎改变了for循环中array2的长度:
function filter_twoArrays(filter,result){
for(i=0; i< filter.length; i++){
for(j=0; j< result.length; j++){
if(filter[i] !== result[j]){
result.splice(j,1)
}
}
}
函数过滤器\u两个数组(过滤器,结果){
对于(i=0;i
任何关于如何改进滤波器功能的输入都将受到极大的赞赏
干杯!您好,这是php函数数组的移植。应该对您有好处
函数数组_intersect(arr1){
//讨论地点:http://phpjs.org/functions/array_intersect/
//原件:Brett Zamir(http://brett-zamir.me)
//注意:这些仅输出关联数组(需要
//注:所有数字和从零开始计数均为数字)
//示例1:$array1={'a':'green',0:'red',1:'blue'};
//示例1:$array2={'b':'green',0:'yellow',1:'red'};
//示例1:$array3=['绿色','红色'];
//示例1:$result=array\u intersect($array1、$array2、$array3);
//返回1:{0:'red',a:'green'}
var retArr={},
argl=arguments.length,
arglm1=argl-1,
k1='',
arr={},
i=0,
k='';
arr1keys:用于(arr1中的k1){
arrs:for(i=1;i
既然您已经标记了javascript,这里就是解决方案
function f1(x, y) {
var t = y.slice(0);
var r = [];
for (var i = 0; i < x.length; i++) {
for (var j = 0; j < y.length; j++) {
if (x[i] === y[j]) {
[].push.apply(r, t.splice(j, 1));
}
}
}
console.log(r)
y.length = 0;
[].push.apply(y, r);
}
函数f1(x,y){
var t=y.slice(0);
var r=[];
对于(变量i=0;i
以下是一种基于代码的简单方法
function array_filter(filter, result) {
var filterLen = filter.length;
var resultLen = result.length;
for (i = 0; i < resultLen; i++) {
for (j = 0; j < filterLen; j++) {
if (!contains(filter, result[i]))
result.splice(i, 1);
}
}
}
//Return boolean depending if array 'a' contains item 'obj'
function contains(array, value) {
for (var i = 0; i < array.length; i++) {
if (array[i] == value) {
return true;
}
}
return false;
}
函数数组\u过滤器(过滤器,结果){
var filterLen=filter.length;
var resultLen=result.length;
对于(i=0;i
标记要通过删除结果[索引]
进行筛选的项目,并根据需要对其进行操作
JavaScript
window.onload=运行;
函数运行(){
var array1=[“苹果”、“葡萄”、“橙子”];
var array2=[“土豆”、“梨”、“葡萄”、“浆果”、“苹果”、“橙子”];
var结果=过滤器两个阵列(阵列1、阵列2);
函数筛选器两个数组(筛选器、结果){
var i=0,
j=0;
对于(i=0;i
您可以按如下方式使用
var array1=[“苹果”、“葡萄”、“橙子”、“香蕉”],
array2=[“土豆”、“梨”、“葡萄”、“浆果”、“苹果”、“橙子”];
var交点=阵列1.过滤器(函数(e){
返回数组2.indexOf(e)>-1;
});
console.log(intersection);
在php中,您可以使用array\u intersect
,但是您的代码似乎有点像JS。结果数组2中元素的顺序对您来说重要吗?使用ES6arr1.filter(e=>arr2.includes(e))
。很棒的@Tushar,干净!
function array_filter(filter, result) {
var filterLen = filter.length;
var resultLen = result.length;
for (i = 0; i < resultLen; i++) {
for (j = 0; j < filterLen; j++) {
if (!contains(filter, result[i]))
result.splice(i, 1);
}
}
}
//Return boolean depending if array 'a' contains item 'obj'
function contains(array, value) {
for (var i = 0; i < array.length; i++) {
if (array[i] == value) {
return true;
}
}
return false;
}