2016-04-17 7 views
5

का उपयोग कर स्ट्रिंग में किसी सरणी के तत्वों में से किसी एक से मिलान करें, मैं एक ऐसा फ़ंक्शन बनाने की कोशिश कर रहा हूं जो स्ट्रिंग सरणी के तत्वों में से कम से कम एक स्ट्रिंग के भीतर पाया जाता है।जावास्क्रिप्ट

function findInString(str) { 
    var fruits = ["orange", "banana", "grape"]; 

    for(var i = 0; i < fruits.length; i++) { 
     if (str.indexOf(fruits[i]) > -1) { 
      return true; 
     } 
    } 

    return false; 
} 

var a = findInString("I love orange juice."); //=> returns true 
var b = findInString("I don't like peach."); //=> returns false 

इस समारोह चाल करता है, लेकिन मुझे यकीन है कि वहाँ कुछ सरणी या स्ट्रिंग विधि है कि सरणी के माध्यम से पाश के बिना एक ही करता है हो सकता है। कोई विचार?

धन्यवाद।

+1

तुम यहाँ एक जवाब नहीं मिलता है, तो आप http://codereview.stackexchange.com –

+0

कोड पर पोस्ट करने पर विचार हो सकता है समीक्षा शायद यह देखना चाहती है कि वास्तविक कोड क्या है। यह वास्तव में उदाहरण कोड जैसा लगता है जो एक ही काम करने के लिए एक अलग तरीके से पूछ रहा है (यानी।एक विशिष्ट प्रोग्रामिंग प्रश्न) जो स्टैक ओवरफ़्लो पर बेहतर फिट है। – Phrancis

+1

आप _have_ को पूर्ण सरणी _somehow_ पर पुन: सक्रिय करने के लिए अन्यथा समाधान पूरा नहीं होगा। – Andy

उत्तर

0

संकल्पनात्मक रूप से मैं ऐसा करने के बेहतर (या यहां तक ​​कि अलग) तरीके से नहीं सोच सकता। मुझे एक अंतर्निहित फ़ंक्शन के बारे में पता नहीं है जो इस कार्य को निष्पादित करता है लेकिन यहां तक ​​कि यदि कोई था तो इसका कार्यान्वयन वैसे भी होगा।

+0

अभी तक यह सबसे अच्छा जवाब रहा है ... मैं कुछ ऐसा करना चाहता था जो मैंने सरल किया और जो जवाब मैं प्राप्त कर रहा हूं वह इसे और अधिक जटिल बना रहा है :) –

1

आप some का उपयोग कर सकते हैं जो इसके बहुत करीब आता है। यहां बताया गया है कि मैं इसे कैसे लिखूंगा:

function find (str, arr) { 
    return arr.some((s) => s.indexOf(str) > -1); 
} 

यदि आप चाहें तो आप यह भी कर सकते हैं लेकिन मुझे इसके बारे में अच्छा नहीं लगता है।

function find (str, arr) { 
    return arr.join(',').indexOf(str) > -1 
} 
1

मुझे ऐसा करने का आपका तरीका पसंद है। मुझे इसमें थोड़ा सा मिला है, यह करने के बारे में आप कई तरीकों से सोच सकते हैं:

इनमें से कुछ वास्तव में करीब हैं, लेकिन आखिरी अवधि में प्रत्येक मामले को संभालने के लिए कुछ स्ट्रिंग पार्सिंग की आवश्यकता हो सकती है। नोट पिछले एक है, क्योंकि यह रेगुलर एक्सप्रेशन का उपयोग करता है, अभ्यस्त स्ट्रिंग के लिए कुछ भी करने की आवश्यकता होती है:

JsBin Example

function findInString(str) { 
    var fruits = ["orange", "banana", "grape"]; 

    return str.split(' ').filter(function(el) { 
    return fruits.indexOf(el) > -1; 
    }).length > 0; 
} 

function finderWithReduce(str) { 
    var fruits = ["orange", "banana", "grape"]; 
    var result = false; 
    str.split(' ').reduce(function(a, b) { 
    if (a.indexOf(b) > -1) { 
     result = true; 
    } 
    return a; 
    }, fruits); 
    return result; 
} 

function finderWithForEach(str){ 
    var fruits = ["orange", "banana", "grape"]; 
    var result = false; 
    fruits.forEach(function(fruit) { 
    if (str.indexOf(fruit) > -1) { 
     result = true; 
    } 
    }); 
    return result; 
} 

function finderWithRegex(str) { 
    var fruits = ["orange", "banana", "grape"]; 
    for (var i = 0; i < fruits.length; i++) { 
    var re = new RegExp(fruits[i], 'gi'); 
    if (str.match(re) !== null) { 
     return true; 
    } 
    } 
    return false; 
} 
1

आप some फ़ंक्शन का उपयोग कर सकते हैं।

function findInString(str, arr) { 
    return arr.some(function(el) { 
     return str.indexOf(el) > -1; 
    }); 
} 

var fruits = ["orange", "banana", "grape"]; 

var a = findInString("I love orange juice.", fruits); //=> returns true 
var b = findInString("I don't like peach.", fruits); //=> returns false 
1

मुझे लगता है कि आपको सरणी को संसाधित करना होगा। मैं दो बदलाव करूंगा।

सबसे पहले मैं एक सामान्य कार्य करने के साथ सरणी के साथ-साथ स्ट्रिंग में भी गुज़रता हूं, फिर मैं इसे फिर से काम करता हूं ताकि एक बार यह पता चल जाए कि यह ऐसा करने से निकलता है और लूप से बाहर निकलता है; वापसी के रूप में समान अवधारणा लेकिन इसे करने का एक अलग तरीका - मेरी व्यक्तिगत वरीयता केवल एक समारोह से बाहर निकलने के लिए है।

function findInString(arr, str) { 
    var hasString = false; 
    for (var i = 0; i < fruits.length; i++) { 
    if (str.indexOf(fruits[i]) > -1) { 
     hasString = true; 
     break; 
    } 
    } 
    return hasString; 
} 

var fruits = ["orange", "banana", "grape"]; 

var a = findInString(fruits, "I love orange juice."); //=> returns true 
var b = findInString(fruits, "I don't like peach."); //=> returns false 
1

यहां एक कार्यात्मक ES6 विधि है। presentIn एक उच्च-आदेश फ़ंक्शन है जो एक स्ट्रिंग लेता है और एक फ़ंक्शन देता है जो some कॉलबैक के रूप में कार्य करता है।

const presentIn = (str) => (el) => str.includes(el); 

fruits.some(presentIn('I love orange juice.')); // true 
fruits.some(presentIn('I don\'t like peach.')); // false 

मैं वास्तव में इस दृष्टिकोण क्योंकि आप सरणी तत्वों पर सीधे काम कर रहे हैं, और अगर आप अपने समारोह का नाम अच्छी तरह से यह शानदार ढंग से स्कैन करता है जैसे: "सरणी के कुछ तत्वों स्ट्रिंग में मौजूद हैं"।

DEMO

तुलना के लिए थोड़ा और अधिक वर्बोज़ ES5 संस्करण:

function presentIn(str) { 
    return function (el) { 
    return str.indexOf(el) > -1; 
    } 
} 
संबंधित मुद्दे