如何交叉两个数组并保持密钥

时间:2017-12-15 10:03:17

标签: javascript php arrays ecmascript-6

在PHP中,我们有一个名为array_intersect的方法:

  

array_intersect()返回一个数组,其中包含所有参数中存在的array1的所有值。请注意,密钥会被保留。

所以它会是这样的:

<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result);

输出:

  

阵列(       [a] =&gt;绿色       [0] =&gt;红色)

正如您所看到的,它会保留键a0

我知道JavaScript中的数组与PHP不同,但它们与JavaScript中的对象类似。

想象一下,我有这个输入:

let a = ['my', 'life', 'sucks', 'so', 'hard'];
let b = ['life', 'sucks', 'hard'];

我希望这会产生这样的结果:

  

让r = {1:&#39; life&#39;,2:&#39; sucks&#39; 4:&#39; hard&#39; }

在简历中,键将是找到它的索引(位置)。

我看到了一个用ES6创建的方法,如下所示:

const intersect = (leftArray, rightArray) => leftArray.filter(value => rightArray.indexOf(value) > -1);

但同样,它不会仅仅返回已找到的值的键。

如果可以使用ES6创建,因为我认为语法更清晰。

2 个答案:

答案 0 :(得分:3)

您可以使用Object.assign并映射想要的属性。

&#13;
&#13;
var a = ['my', 'life', 'sucks', 'so', 'hard'],
    b = ['life', 'sucks', 'hard'],
    result = Object.assign(...a.map((v, i) => b.includes(v) && { [i]: v }));
    
console.log(result);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

使用Array#reduce

尝试此解决方案

&#13;
&#13;
mysqldump: Couldn't execute 'SELECT /*!40001 SQL_NO_CACHE */ * FROM `COMMANDSPOOL` WHERE SELECT v.ITEM_ID , v.CODE ,s.SENSOR , d.DESTINATIONCODE FROM  V_TABLE v, S_TABLE s ,D_TABLE d  WHERE s.ITEM_ID = v.ITEM_ID AND s.CREATIONDATETIME <  '2014-2-16 00:00:00' AND v.DESTINATION_ID=d.ID': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT v.ITEM_ID , v.CODE ,s.SENSOR , d.DESTINATIONCODE FROM  V_TABLE' at line 1 (1064         )
&#13;
&#13;
&#13;