Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较和过滤两个阵列_Javascript_Arrays_Loops_Filter_Array Splice - Fatal编程技术网

Javascript 比较和过滤两个阵列

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的元素用作过滤array2中元素的条件

例如:

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中元素的顺序对您来说重要吗?使用ES6
arr1.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;
}