javascript - 如何相交两个数组并保留 key

标签 javascript php arrays ecmascript-6

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

array_intersect() returns an array containing all the values of array1 that are present in all the arguments. Note that keys are preserved.

所以它会是这样的:

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

输出:

Array ( [a] => green [0] => red )

如您所见,它保留了键 a0

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

假设我有这样的输入:

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

我希望这会导致这样的结果:

let r = { 1: 'life', 2: 'sucks', 4: 'hard' }

在 resume 中,keys 是找到它的索引(位置)。

我看到一个用 ES6 创建的方法是这样的:

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

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

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

最佳答案

你可以使用 Object.assign并映射所需的属性。

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);

关于javascript - 如何相交两个数组并保留 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47829910/

相关文章:

javascript - 隐藏内容以防止在 JavaScript 制作的游戏中作弊

php - 以 dd/mm/yyyy 格式比较 2 个日期的最短方法

javascript - Firebase 存储 : How to store image url as an object property?

javascript - 如何从模板节点复制并填充 json 数据并使用 javascript 将它们附加到文档中?

JavaScript 源文件未在 IE8 弹出窗口中加载

php - 12 小时时钟数组排序

php - 将 php 数组插入 mySql

php - 如何防止 PHPStorm 在启动时打开项目?

PHP/RegEx - 通过检测 .com/.net/.org/.edu 等将 URL 转换为链接

php - 比较两个数组中具有匹配键的数值(使用阈值/容差)