पर आधारित स्ट्रिंग्स की एक सूची फ़िल्टर करना AngularJS 1.6 के साथ एक जावास्क्रिप्ट प्रोजेक्ट पर काम करते समय, मेरे पास स्ट्रिंग्स की एक सूची है जिसे मैं फ़िल्टर करना चाहता हूं। उदाहरण के लिए, मान लेते हैं मेरी सूची Arbol, cigüeña, nido और ट्यूब शामिल हैं।उपयोगकर्ता लोकेल
जब स्पेनिश में तार को छानने, अगर मैं "यू" के लिए फ़िल्टर, मैं प्रकट करने के लिए है, जो एक स्पेनी के लिए सबसे अधिक प्राकृतिक परिणाम होगा दोनों cigüeña और ट्यूब उम्मीद थी। हालांकि, जर्मन में यह मामला नहीं है - आप और ü अलग-अलग अक्षर हैं और इस प्रकार एक जर्मन सूची में सिगुएना देखना नहीं चाहेगा। तो मैं अपनी सूची को उपयोगकर्ता के लोकेल के बारे में जागरूक करने के लिए एक तरीका ढूंढ रहा हूं।
मैंने किसी चीज़ विशेषक के बहुत सारे हैं, जैसे कि युक्त करने के लिए होती हैं:
diacritics["á"] = "a";
diacritics["ü"] = "u";
// and so on...
इस तरह क्या मेरी छानने कोड दिखाई देता है:
function matches(word, search) {
var cleanWord = removeDiacritics(word.toLowerCase());
var cleanSearch = removeDiacritics(search.toLowerCase());
return cleanWord.indexOf(cleanSearch) > -1;
}
function removeDiacritics(word) {
function match(a) {
return diacritics[a] || a;
}
return text.replace(/[^\u0000-\u007E]/g, match);
}
ऊपर कोड बस सभी विशेषक निकाल देता है, तो मैंने इसे उपयोगकर्ता के लोकेल के बारे में जागरूक करने के लिए सोचा। इस प्रकार, मैंने मैच() फ़ंक्शन को इस पर बदल दिया:
function match(a) {
if (diacritics[a] && a.localeCompare(diacritics[a] === 0) {
return diacritics[a];
}
return a;
}
दुर्भाग्यवश, यह काम नहीं करता है। लोकेल कॉम्पैयर फ़ंक्शन जर्मन और स्पैनिश लोकेशंस के साथ "यू" और "ü" की तुलना करते समय समान मूल्य देता है, इसलिए यह यहां जवाब नहीं था। मैं reference for the localeCompare method पर गया हूं और उपयोग और संवेदनशीलता विकल्पों का प्रयास किया है, लेकिन वे यहां बहुत मदद नहीं कर रहे हैं।
इस काम के लिए मैं अपने कोड को कैसे बदल सकता हूं? क्या कोई पुस्तकालय है जो इसे मेरे लिए ठीक से संभाल सकता है?
मुझे लगता है कि आपके आखिरी स्निपेट में एक छोटी सी गलती है। मुझे लगता है कि "स्थान" चर को "भाषा" कहा जाना चाहिए। इसके अलावा, यह सही है! – unpollito
@unpollito ओह, यह अभी तय है – Cole