2016-10-04 3 views
-3

코딩에 관해서는 완전한 초보자이지만 다음을 수행하려고합니다. 문자열에 다차원 배열의 모든 단어가 포함되어 있는지 확인하는 방법은 무엇입니까?

내가 이런 다차원 배열이 : 나는 HTML 요소에서 문자열을 검색하고 있습니다

var requiredProducts = [{ 
    product: 'PRODUCT 1', 
    keywords: ['KEYWORD1', 'KEYWORD2', 'KEYWORD3'], 
    price: '50.00' 
},{ 
    product: 'PRODUCT 2', 
    keywords: ['KEYWORD4', 'KEYWORD5', 'KEYWORD6'], 
    price: '50.00' 
}]; 

을, 예를 들어 말 :

이 문자열은 환상적이다, 그것은 KEYWORD1 및 KEYWORD3을 포함 , KEYWORD2

문자열에 키워드 배열의 모든 키워드가 포함되어 있는지 확인하려면 어떻게해야합니까? (키워드 순서는 문제). 나는 여러 가지 것을 며칠 동안 시도해 왔지만 실제로 아픈 두뇌를 얻지는 못했습니다.

감사합니다. 감사드립니다.

코드 블록이 도움이된다면 추가하려고합니다. 새 함수는 '***'에서 호출해야하며 키워드가 모두 발견되면이 함수를 계속 사용할 수 있습니다.

function checkPopup(jNode) { 
console.log(scriptName + 'Found new popup.'); 
console.log(scriptName + 'Checking popup...'); 
linkText = jNode.attr("title"); 
linkText = linkText.toUpperCase(); 
console.log(scriptName + 'Popup: ' + linkText); 
if *** { 
    console.log(scriptName + 'Popup matched.'); 
} else { 
    console.log(scriptName + 'Product not matched.'); 
} 
} 
+1

1) 시도한 것을 게시하십시오. 우리가 작업하고있는 컨텍스트를 확인하는 것이 중요합니다 2) 검색 할 키워드에 대해 '제품'에 어떤 영향이 있습니까? –

+0

@ @ RoryMcCrossan이 말한 것과 마찬가지입니다. ** "여러 일을 며칠 동안 시도하기"*로 설명하는 코드 예제 **를 게시하십시오. –

+0

안녕하세요, Rory, 답장을 보내 주셔서 감사합니다. 나는 시도한 다양한 방법을 추적하지 못했다. (나는 상자에서 꺼냈다.) 기본적으로 나는 그물을 닦고 여러 가지 해결책을 시도했다. 내가 생각하는 문제는 내 요구 사항을 조정하는 것이 었습니다 (대부분의 경우 다차원 배열을 사용하고 있음). 내 코드에서 다른 곳으로 돌아 오는 제품은 대부분 가격이 맞으면이 부분이 정상적으로 작동합니다. –

답변

-2

당신은 Array.prototype.every 그것은 배열의 항목을 통해 술어 기능을 실행 사용하는 경우에만 각 반복 true를 반환 true를 반환 할 수 있습니다.

Array.prototype.every은 최신 브라우저에서만 지원됩니다. 여기

var requiredProducts = [{ 
 
    product: 'PRODUCT 1', 
 
    keyword: ['KEYWORD1', 'KEYWORD2', 'KEYWORD3'], 
 
    price: '50.00' 
 
}, { 
 
    product: 'PRODUCT 2', 
 
    keyword: ['KEYWORD4', 'KEYWORD5', 'KEYWORD6'], 
 
    price: '50.00' 
 
}]; 
 

 
var str1 = 'This string is fantastic, it contains KEYWORD1 and KEYWORD3, and KEYWORD2' 
 
var str2 = 'This string is fantastic, it contains KEYWORD4 and KEYWORD5, and KEYWORD6' 
 

 

 
function matchProductByKeywords(str, products) { 
 
    return products.filter(function(product){ 
 
    return product.keyword.every(
 
     function(word) { 
 
     return str.match(word) 
 
     } 
 
    ) 
 
    }) 
 
} 
 
console.log(
 
    'str1', matchProductByKeywords(str1, requiredProducts), 
 
    'str2', matchProductByKeywords(str2, requiredProducts) 
 
)

당신이 사용할 수있는 모든위한 심이다. 지원되지 않는 브라우저의 경우

Array.prototype.every = Array.prototype.every || function(predicate){ 
    for (var ii = 0, ll = this.length; ii < ll; ii+=1) { 
    if (!predicate.call(this, this[ii], ii, this)) { 
    return false 
    } 
    } 
    return true 
} 
+0

은 풀 브라우저 지원 기능이없는 기능을 사용할 때 항상 명확히해야합니다. – charlietfl

+0

이 방법으로도 문제가 해결되지 않습니다. 예, 개별적으로 각 값을 확인하지만 모두 함께 검사하지 않습니다. –

+0

필수 배열의'every' 키워드가 문자열에 있는지 확인합니다. 그것이 문제였습니다. – synthet1c

0

외부 모듈 또는 라이브러리를 사용하여 두 배열의 교차를 계산하지 않는다고 가정합니다. 시도해보십시오.

var phrase = "This string is fantastic, it contains KEYWORD1 and KEYWORD3, and KEYWORD2"; 
var words = phrase.split(/[\s,]/); 

var results = [] 

requiredProducts.forEach(function (item) { 
    var intersection = item.keyword.filter(function(value) { 
     return words.indexOf(value) > -1; 
    }); 
    results.push({ 
     product: item.product, 
     match: item.keyword.length === intersection.length, 
     intersection: intersection 
    }); 
}); 

console.log(results); 
관련 문제