मैं उन यूआरएल की एक सरणी को फ़िल्टर करना चाहता हूं जिनमें ब्लैकलिस्ट सरणी में मौजूद कोई भी सबस्ट्रिंग शामिल है।

const urls = [
'http://example.com/people/chuck', 
'http://example.com/goats/sam', 
'http://example.com/goats/billy', 
'http://example.com/goats/linda', 
'http://example.com/cows/mary', 
'http://example.com/cows/betty', 
'http://example.com/people/betty']

const blacklist = ['cows', 'goats']

let cleanUrls = [];

मैं इसे फॉर-लूप के साथ कर सकता हूं लेकिन मैं फ़िल्टर और/या कम करने का उपयोग करके एक साफ/संक्षिप्त तरीका खोजना चाहता हूं।

अगर मुझे ब्लैकलिस्ट आइटम की x संख्या पर लूप करने की आवश्यकता नहीं है:

cleanUrls = urls.filter( url => !url.includes(blacklist[0]) )                  
                .filter( url => !url.includes(blacklist[1]) ) 

मैं भी केवल प्रत्येक या मानचित्र के साथ ब्लैकलिस्ट के माध्यम से पुनरावृति नहीं करना चाहता क्योंकि यदि कोई विशेष यूआरएल किसी ब्लैकलिस्ट प्रविष्टि से मेल खाता है तो मैं तुरंत रोकना चाहता हूं।

सादा जेएस कृपया। धन्यवाद। :)

2
Ivan Town 29 मार्च 2018, 20:01

5 जवाब

दूसरों ने सवाल का जवाब दिया है। दो अलग-अलग परिदृश्य प्रदान करना।

const urls = [
  'http://example.com/people/chuck',
  'http://example.com/goats/billy',
  'http://example.com/aagoatsss/billyyy',
  'http://example.com/people/betty'
]

const blacklist = ['cows', 'goats']

//1st approach. It will also block 'http://example.com/aagoatsss/billyyy'
let cleanUrls1 = urls.filter(
  url => blacklist.find(
    blockWord => url.indexOf(blockWord) != -1 //Url contains Block Word
  ) === undefined //url donot contain any block word.
)

console.log(cleanUrls1)

//2nd approach. It will pass 'http://example.com/aagoatsss/billyyy'

let cleanUrls2 = urls.filter(
  url => blacklist.find(
    blockWord => url.split('/').indexOf(blockWord) != -1 //Url contains Block Word
  ) === undefined //url donot contain any block word.
)
console.log(cleanUrls2)
0
amit77309 29 मार्च 2018, 17:19

मैं भी केवल प्रत्येक या मानचित्र के साथ ब्लैकलिस्ट के माध्यम से पुनरावृति नहीं करना चाहता क्योंकि यदि कोई विशेष यूआरएल किसी ब्लैकलिस्ट प्रविष्टि से मेल खाता है तो मैं तुरंत रोकना चाहता हूं।

यदि ब्लैकलिस्ट से कोई तत्व प्रकट होता है तो फ़ंक्शन खोजना बंद कर देता है।

इस समस्या को हल करने का पुनरावर्ती तरीका:

const urls = [
'http://example.com/people/chuck', 
'http://example.com/goats/sam', 
'http://example.com/goats/billy', 
'http://example.com/goats/linda', 
'http://example.com/cows/mary', 
'http://example.com/cows/betty', 
'http://example.com/people/betty']

const blacklist = ['cows', 'goats']

function filter([url, ...urls] =[], blackList=[], filteredUrls =[] ){
	return !url || blacklist.some(el => url.includes(el)) 
        ? filteredUrls 
        : filter(urls, blackList, [...filteredUrls, url])
}

console.log(filter(urls, blacklist));
0
Bartłomiej Gładys 29 मार्च 2018, 17:17

यूआरएल में दूसरी सरणी से तत्व मौजूद है या नहीं, यह जांचने के लिए आप प्रत्येक और अनुक्रमणिका के लिए उपयोग कर सकते हैं

const urls = [
  'http://example.com/people/chuck',
  'http://example.com/goats/sam',
  'http://example.com/goats/billy',
  'http://example.com/goats/linda',
  'http://example.com/cows/mary',
  'http://example.com/cows/betty',
  'http://example.com/people/betty'
]

const blacklist = ['cows', 'goats'];

var newArray = [];
blacklist.forEach(function(item) {
  if (newArray.length === 0) {
    newArray = urls.filter(function(items) {
      return (items.indexOf(item) === -1)

    })

  } else {
    newArray = newArray.filter(function(items) {
      return (items.indexOf(item) === -1)
    })
  }
});
console.log(newArray)
0
brk 29 मार्च 2018, 17:09

ब्लैकलिस्ट i को रेगेक्स में बदलना आसान हो सकता है:

 const block = new RegExp(blacklist.join("|"));

उन्हें यह उतना ही सरल है:

 cleanUrls = urls.filter(url => !url.match(block));
0
Jonas Wilms 29 मार्च 2018, 17:07

आप इसे filter(), some() और includes() विधियों से कर सकते हैं।

const urls = ['http://example.com/people/chuck', 'http://example.com/goats/sam', 'http://example.com/goats/billy', 'http://example.com/goats/linda', 'http://example.com/cows/mary', 'http://example.com/cows/betty', 'http://example.com/people/betty'];
const blacklist = ['cows', 'goats']

const result = urls.filter(url => !blacklist.some(e => url.includes(e)))

console.log(result)
1
Nenad Vracar 29 मार्च 2018, 17:05