JavaScript에서 한 배열의 값을 비교하여 다른 배열에 있는지 확인하는 방법이 있습니까?
PHP의 in_array
기능과 비슷 합니까?
답변
아니요, 없습니다. 이러한 이유로 가장 인기있는 라이브러리는 유틸리티 패키지에 하나와 함께 제공됩니다. 예제는 jQuery의 inArray 와 Prototype의 Array.indexOf 를 확인하십시오 .
jQuery의 구현은 예상대로 간단합니다.
function inArray(needle, haystack) {
var length = haystack.length;
for(var i = 0; i < length; i++) {
if(haystack[i] == needle) return true;
}
return false;
}
깔끔한 양의 배열 요소를 다루는 경우 위의 방법으로 멋지게 할 수 있습니다.
편집 : 으악. 배열이 다른 배열 안에 있는지 확인하고 싶지 않은지도조차 알지 못했습니다. PHP 문서에 따르면 이것은 PHP의 예상되는 동작입니다 in_array
.
$a = array(array('p', 'h'), array('p', 'r'), 'o');
if (in_array(array('p', 'h'), $a)) {
echo "'ph' was found\n";
}
if (in_array(array('f', 'i'), $a)) {
echo "'fi' was found\n";
}
if (in_array('o', $a)) {
echo "'o' was found\n";
}
// Output:
// 'ph' was found
// 'o' was found
Chris와 Alex가 게시 한 코드는이 동작을 따르지 않습니다. Alex는 Prototype의 indexOf 공식 버전이며 Chris는 PHP와 비슷 array_intersect
합니다. 이것은 당신이 원하는 것을합니다 :
function arrayCompare(a1, a2) {
if (a1.length != a2.length) return false;
var length = a2.length;
for (var i = 0; i < length; i++) {
if (a1[i] !== a2[i]) return false;
}
return true;
}
function inArray(needle, haystack) {
var length = haystack.length;
for(var i = 0; i < length; i++) {
if(typeof haystack[i] == 'object') {
if(arrayCompare(haystack[i], needle)) return true;
} else {
if(haystack[i] == needle) return true;
}
}
return false;
}
그리고 이것에 대한 위의 테스트 :
var a = [['p','h'],['p','r'],'o'];
if(inArray(['p','h'], a)) {
alert('ph was found');
}
if(inArray(['f','i'], a)) {
alert('fi was found');
}
if(inArray('o', a)) {
alert('o was found');
}
// Results:
// alerts 'ph' was found
// alerts 'o' was found
Array 프로토 타입을 의도적으로 확장하지는 않았는데, 일반적으로 그렇게하는 것은 좋지 않습니다.
답변
contains () 메서드는 배열에 특정 요소가 포함되어 있는지 확인하여 적절하게 true 또는 false를 반환합니다.
var a = [1, 2, 3];
a.includes(2); // true
a.includes(4); // false
통사론
arr.includes(searchElement)
arr.includes(searchElement, fromIndex)
답변
Array.indexOf
JavaScript 1.6에서 도입되었지만 이전 브라우저에서는 지원되지 않습니다. 고맙게도 Mozilla의 문제 는 당신을 위해 모든 노력 을 다했으며 호환성을 위해 이것을 제공했습니다.
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(elt /*, from*/)
{
var len = this.length >>> 0;
var from = Number(arguments[1]) || 0;
from = (from < 0)
? Math.ceil(from)
: Math.floor(from);
if (from < 0)
from += len;
for (; from < len; from++)
{
if (from in this &&
this[from] === elt)
return from;
}
return -1;
};
}
스크립팅의 즐거움을위한 편리한 사용 스 니펫도 있습니다.
답변
인덱스가 순서에 맞지 않거나 인덱스가 연속적이지 않으면 여기에 나열된 다른 솔루션의 코드가 손상됩니다. 다소 더 나은 솔루션은 다음과 같습니다.
function in_array(needle, haystack) {
for(var i in haystack) {
if(haystack[i] == needle) return true;
}
return false;
}
그리고 보너스로 다음은 PHP의 array_search와 같습니다 (배열에서 요소의 키를 찾는 경우).
function array_search(needle, haystack) {
for(var i in haystack) {
if(haystack[i] == needle) return i;
}
return false;
}
답변
Locutus 라는 프로젝트가 있으며 Javascript로 PHP 함수를 구현하고 in_array () 가 포함되어 있으므로 PHP에서 사용하는 그대로 사용할 수 있습니다.
사용 예 :
in_array('van', myArray);
in_array(1, otherArray, true); // Forcing strict type
답변
w3schools에서이 학습에 설명 된대로 “include”기능을 간단히 사용할 수 있습니다.
그것은 보인다
let myArray = ['Kevin', 'Bob', 'Stuart'];
if( myArray.includes('Kevin'))
console.log('Kevin is here');
답변
var a = [1,2,3,4,5,6,7,8,9];
var isSixInArray = a.filter(function(item){return item==6}).length ? true : false;
var isSixInArray = a.indexOf(6)>=0;