tl;dr
function includes(k) {
for(var i=0; i < this.length; i++){
if( this[i] === k || ( this[i] !== this[i] && k !== k ) ){
return true;
}
}
return false;
}
Beispiel
function includes(k) {
for(var i=0; i < this.length; i++){
if( this[i] === k || ( this[i] !== this[i] && k !== k ) ){
return true;
}
}
return false;
}
function log(msg){
$('#out').append('<div>' + msg + '</div>');
}
var arr = [1, "2", NaN, true];
arr.includes = includes;
log('var arr = [1, "2", NaN, true];');
log('<br/>');
log('arr.includes(1): ' + arr.includes(1));
log('arr.includes(2): ' + arr.includes(2));
log('arr.includes("2"): ' + arr.includes("2"));
log('arr.includes(NaN): ' + arr.includes(NaN));
log('arr.includes(true): ' + arr.includes(true));
log('arr.includes(false): ' + arr.includes(false));
#out{
font-family:monospace;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id=out></div>
Längere Antwort
Ich weiß, dass es bei dieser Frage nicht wirklich darum geht, ob eingebaute Objekte erweitert werden sollen oder nicht, aber der Versuch des OP und die Kommentare zu dieser Antwort unterstreichen diese Debatte. Mein Kommentar vom 12. Februar '13 zitiert einen Artikel, der diese Debatte sehr gut umreißt, allerdings ist der Link kaputt und ich kann den ursprünglichen Kommentar nicht bearbeiten, weil zu viel Zeit vergangen ist, daher füge ich ihn ein aquí .
Wenn Sie die eingebauten Funktionen erweitern möchten Array
Objekt mit einer contains
Methode ist es wahrscheinlich am besten und am verantwortungsvollsten, dieses Polyfill von MDN . (Siehe auch este Abschnitt des MDN-Artikels über prototypische Vererbung, der erklärt, dass "Der einzige gute Grund für die Erweiterung eines eingebauten Prototyps ist die Rückportierung von Funktionen neuerer JavaScript-Engines, z. B. Array.forEach usw." )
if (!Array.prototype.includes) {
Array.prototype.includes = function(searchElement /*, fromIndex*/ ) {
'use strict';
var O = Object(this);
var len = parseInt(O.length) || 0;
if (len === 0) {
return false;
}
var n = parseInt(arguments[1]) || 0;
var k;
if (n >= 0) {
k = n;
} else {
k = len + n;
if (k < 0) {k = 0;}
}
var currentElement;
while (k < len) {
currentElement = O[k];
if (searchElement === currentElement ||
(searchElement !== searchElement && currentElement !== currentElement)) {
return true;
}
k++;
}
return false;
};
}
Sie wollen keine strikte Gleichberechtigung, oder Sie wollen wählen?
function includes(k, strict) {
strict = strict !== false; // default is true
// strict = !!strict; // default is false
for(var i=0; i < this.length; i++){
if( (this[i] === k && strict) ||
(this[i] == k && !strict) ||
(this[i] !== this[i] && k !== k)
) {
return true;
}
}
return false;
}
10 Stimmen
Der Code funktioniert in Safari 4.0.2. Übrigens: Ich würde eine
===
Vergleich anstelle von nur==
.1 Stimmen
"Die obige Funktion gibt immer false zurück." Nein, das tut sie nicht: Die Funktion funktioniert wie erwartet - der Fehler muss woanders liegen.
2 Stimmen
Siehe auch: stackoverflow.com/q/237104/1569
5 Stimmen
Finally its worked. its due to improper trim of the comparing value. there was some space in the comparing value
(Ein Kommentar des Fragestellers zum akzeptierte Antwort .)0 Stimmen
Es funktioniert, Sie hätten Folgendes verwenden sollen
===
anstelle von==
0 Stimmen
Für alle, die noch damit zu kämpfen haben. Das Folgende hat es für mich erledigt: 1. lodash.includes mit folgendem Befehl installieren: npm --save lodash.includes 2. Require lodash.includes: var includes = require('lodash.includes'); 3. use it like this: arrayBeingUsed.includes(valueToLookFor); ( npmjs.com/package/lodash.includes )
0 Stimmen
Verwandt mit besserer Antwort - stackoverflow.com/a/38073833/104380
0 Stimmen
["Admin", "Action", "WriteType"].find( (key) => { console.log(
Taste =, key); return key === "KeyWord" } );
0 Stimmen
developer.mozilla.org/de-US/docs/Web/JavaScript/Reference/
0 Stimmen
Sie können Lodash _.some(arrValues,'Sam') => true /false verwenden
0 Stimmen
If(numbers.join('') == '') dann bedeutet dies, dass das Array mit dem Namen 'numbers' leer ist.
0 Stimmen
Es gibt keine contains-Methode in Javascript für Array, Sie können stattdessen includes verwenden