首页 > 解决方案 > 如何检查一个数组是否包含可以在另一个数组中找到的元素并存储它们的值

问题描述

如何检查以下两个对象是否具有匹配的元素?如果他们有匹配的元素..我想将匹配的元素存储在一个名为的空变量中var storeHere = []

var one = ["2021-02-25", "2021-02-24", "2021-02-23", "2021-02-22", "2021-02-21", "2021-03-02", "2021-02-11", "2021-02-10"];
var two = ["2021-02-25", "2021-02-25", "2021-02-23"];

var storeHere = [];

到目前为止,我设法匹配了这两个对象,如果有匹配,则得到一个真或假,但我也想将匹配的值存储在一个 emtpy 变量中。

var one = ["2021-02-25", "2021-02-24", "2021-02-23", "2021-02-22", "2021-02-21", "2021-03-02", "2021-02-11", "2021-02-10"];
var two = ["2021-02-25", "2021-02-25", "2021-02-23"];

function ex (alldates, selected) {
    return selected.some(function (v) {
        return alldates.indexOf(v) >= 0;
    });
};
    ex(one, two);
  

标签: javascriptjquery

解决方案


你有几个选择

您可以使用Array.filter

const one = [
    "2021-02-25",
    "2021-02-24",
    "2021-02-23",
    "2021-02-22",
    "2021-02-21",
    "2021-03-02",
    "2021-02-11",
    "2021-02-10",
];

const two = [
    "2021-02-25",
    "2021-02-25",
    "2021-02-23",
];

// If an element is in two, include it. Otherwise, exclude it.
const storeHere = one.filter((date) => two.includes(date))

console.log(storeHere) // [ '2021-02-25', '2021-02-23' ]

或者你可以使用 ES6 集合Set.has

const one = [
    "2021-02-25",
    "2021-02-24",
    "2021-02-23",
    "2021-02-22",
    "2021-02-21",
    "2021-03-02",
    "2021-02-11",
    "2021-02-10",
];

const two = new Set([
    "2021-02-25",
    "2021-02-25",
    "2021-02-23",
]);

// If an element is in two, include it. Otherwise, exclude it.
const storeHere = one.filter((date) => two.has(date))

console.log(storeHere) // [ '2021-02-25', '2021-02-23' ]

set 的优点是速度更快,因为它只包含唯一元素(如果存在任何重复元素)。但是,差异可能很小,因为两种解决方案基本相同。


推荐阅读