js简单算法如何去除一个数组中与另一个数组中的值相同的元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js简单算法如何去除一个数组中与另一个数组中的值相同的元素相关的知识,希望对你有一定的参考价值。

参考技术A var arr1 = [1,3,5,7,9];
var arr2 = [1,2,3,4,5,6,7,8,9];
console.log(arr1);
console.log(arr2);

for (var i = 0; i < arr2.length; i++)
    for (var j = 0; j < arr1.length; j++)
    
        if (arr2[i] == arr1[j])
            arr2.splice(i,1);
        
    

console.log(arr2);

arr2是要去除与另一个数组中的值相同的数组, 如果把arr2和arr1互换, 前后两者结果如图:

参考技术B codewars上面6kyu的算法题,下面是算法题的英文简介

Your goal in this kata is to implement an difference function, which subtracts one list from another.
It should remove all values from list a, which are present in listb.
difference([1,2],[1]) == [2]

If a value is present in b, all of its occurrences must be removed from the other:
difference([1,2,2,2,3],[2]) == [1,3]

以下是我的解答,可以作为参考

[html] view plain copy
function array_diff(a, b)
for(var i=0;i<b.length;i++)

for(var j=0;j<a.length;j++)

if(a[j]==b[i])
a.splice(j,1);
j=j-1;



return a;
本回答被提问者采纳

PHP:如何将一个数组中的键与另一个数组中的值进行比较,并返回匹配项?

【中文标题】PHP:如何将一个数组中的键与另一个数组中的值进行比较,并返回匹配项?【英文标题】:PHP: How to compare keys in one array with values in another, and return matches? 【发布时间】:2014-08-24 13:35:29 【问题描述】:

我有以下两个数组:

$array_one = array('colorZero'=>'black', 'colorOne'=>'red', 'colorTwo'=>'green', 'colorThree'=>'blue', 'colorFour'=>'purple', 'colorFive'=>'golden');

$array_two = array('colorOne', 'colorTwo', 'colorThree');

我想要一个来自 $array_one 的数组,它只包含键是 $array_two 成员的键值对(通过创建一个新数组或从 @987654324 中删除其余元素@)

我该怎么做?

我查看了 array_diffarray_intersect,但它们将值与值进行比较,而不是将一个数组的值与另一个数组的键进行比较。

【问题讨论】:

array_diff() 或 array_intersect() 结合array_keys() 【参考方案1】:

从 PHP 5.1 开始,有 array_intersect_key (manual)。

只需使用array_flip() 将第二个数组从 key=>value 翻转为 value=>key,然后比较键。

所以要比较 OP 的数组,可以这样做:

$result = array_intersect_key( $array_one , array_flip( $array_two ) );

根本不需要循环数组。

【讨论】:

好的单行解决方案,但我认为这个函数循环相同。【参考方案2】:

更新

查看 Michel 的回答:https://***.com/a/30841097/2879722。这是一个更好、更简单的解决方案。


原答案

如果我理解正确:

返回一个新数组:

$array_new = [];
foreach($array_two as $key)

    if(array_key_exists($key, $array_one))
    
        $array_new[$key] = $array_one[$key];
    

从 $array_one 中剥离:

foreach($array_one as $key => $val)

    if(array_search($key, $array_two) === false)
    
        unset($array_one[$key]);
    

【讨论】:

在内存方面什么会更快且成本更低?我认为是第二个? 是的,我会选择第二个。其中较小的数组用于比较,您正在剥离一个已经设置的变量,而不是创建一个新变量。 第二种方法是快速“AND”比较的一个非常好的建议!【参考方案3】:

告诉我它是否有效:

for($i=0;$i<count($array_two);$i++)
  if($array_two[$i]==key($array_one))
     $array_final[$array_two[$i]]=$array_one[$array_two[$i]];
     next($array_one);
  

【讨论】:

$array_final 是正在创建一个新数组吗?但是当我尝试在循环之后执行print_r($array_final); 时,我得到了Notice: Undefined variable: array_final in C:\xampp\htdocs\testsNine.php on line 14。 :s 抱歉我忘记声明了:$array_final = array(); 我确实尝试过声明它。打印一个空白数组。您还将 count($array_two) 与来自 JS 的 $array_two.length 混淆了。这也产生了一个错误。但我理解这个概念。所以谢谢你。

以上是关于js简单算法如何去除一个数组中与另一个数组中的值相同的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何将char数组中的值与另一个char进行比较

PHP:如何将一个数组中的键与另一个数组中的值进行比较,并返回匹配项?

PHP:如何比较一个数组中的键与另一个数组中的值,并返回匹配?

SQL 表中如何让某条记录的某个属性值与另一个表中的某条记录的某个属性值相关联

JS去除数组中重复的数字

js数组中如何去除重复值?