932 Stimmen

Prüfen, ob ein Array ein Element eines anderen Arrays in JavaScript enthält

Ich habe ein Ziel-Array ["apple","banana","orange"] und ich möchte prüfen, ob andere Arrays eines der Elemente des Ziel-Arrays enthalten.

Zum Beispiel:

["apple","grape"] //returns true;

["apple","banana","pineapple"] //returns true;

["grape", "pineapple"] //returns false;

Wie kann ich das in JavaScript machen?

1345voto

Paul Grimshaw Punkte 16786

Vanille JS

ES2016:

const found = arr1.some(r=> arr2.includes(r))

ES6:

const found = arr1.some(r=> arr2.indexOf(r) >= 0)

Wie es funktioniert

some(..) prüft jedes Element des Arrays gegen eine Testfunktion und gibt true zurück, wenn irgendein Element des Arrays die Testfunktion besteht, andernfalls gibt es false zurück. indexOf(..) >= 0 y includes(..) geben beide true zurück, wenn das angegebene Argument im Array vorhanden ist.

346voto

skyisred Punkte 6715

Vanilla js

/**
 * @description determine if an array contains one or more items from another array.
 * @param {array} haystack the array to search.
 * @param {array} arr the array providing items to check for in the haystack.
 * @return {boolean} true|false if haystack contains at least one item from arr.
 */
var findOne = function (haystack, arr) {
    return arr.some(function (v) {
        return haystack.indexOf(v) >= 0;
    });
};

Wie von @loganfsmyth erwähnt, können Sie es in ES2016 auf

/**
 * @description determine if an array contains one or more items from another array.
 * @param {array} haystack the array to search.
 * @param {array} arr the array providing items to check for in the haystack.
 * @return {boolean} true|false if haystack contains at least one item from arr.
 */
const findOne = (haystack, arr) => {
    return arr.some(v => haystack.includes(v));
};

oder einfach als arr.some(v => haystack.includes(v));

Wenn Sie feststellen wollen, ob das Array alle Elemente aus dem anderen Array enthält, ersetzen Sie some() a every() oder als arr.every(v => haystack.includes(v));

157voto

protanvir993 Punkte 2241

ES6-Lösung:

let arr1 = [1, 2, 3];
let arr2 = [2, 3];

let isFounded = arr1.some( ai => arr2.includes(ai) );

Im Gegensatz dazu: Muss alle Werte enthalten.

let allFounded = arr2.every( ai => arr1.includes(ai) );

81voto

willz Punkte 2000

Wenn Sie nichts dagegen haben, eine Bibliothek zu benutzen, http://underscorejs.org/ verfügt über eine Schnittpunktmethode, die dies vereinfachen kann:

var _ = require('underscore');

var target = [ 'apple', 'orange', 'banana'];
var fruit2 = [ 'apple', 'orange', 'mango'];
var fruit3 = [ 'mango', 'lemon', 'pineapple'];
var fruit4 = [ 'orange', 'lemon', 'grapes'];

console.log(_.intersection(target, fruit2)); //returns [apple, orange]
console.log(_.intersection(target, fruit3)); //returns []
console.log(_.intersection(target, fruit4)); //returns [orange]

Die Schnittmengenfunktion gibt ein neues Array mit den übereinstimmenden Elementen zurück, und wenn keine Übereinstimmung vorliegt, wird ein leeres Array zurückgegeben.

75voto

lusk Punkte 729

ES6 (am schnellsten)

const a = ['a', 'b', 'c'];
const b = ['c', 'a', 'd'];
a.some(v=> b.indexOf(v) !== -1)

ES2016

const a = ['a', 'b', 'c'];
const b = ['c', 'a', 'd'];
a.some(v => b.includes(v));

Unterstrich

const a = ['a', 'b', 'c'];
const b = ['c', 'a', 'd'];
_.intersection(a, b)

DEMO: https://jsfiddle.net/r257wuv5/

jsPerf: https://jsperf.com/array-contains-any-element-of-another-array

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X