Use JS native methods for array manipulations

* In mw.uls.addPreviousLanguage, jQuery.map was used for what is
essentially filtering, not mapping. Filtering was used to remove
one element from array. Use Array.prototype.splice instead.
* In mw.uls.getFrequentLanguageList, replace:
- jQuery.each with Array.prototype.forEach
- jQuery.inArray with Array.prototype.indexOf
- jQuery.grep with Array.prototype.filter

Change-Id: Id2208b3c89e982f91f49981d18e588ae8ce3b130
This commit is contained in:
petarpetkovic
2018-08-24 20:07:49 +02:00
parent cd32adcb37
commit 6ce67b8dda

View File

@@ -107,13 +107,15 @@
* @since 2016.05
*/
mw.uls.addPreviousLanguage = function ( language ) {
var languages = mw.uls.getPreviousLanguages();
var languages = mw.uls.getPreviousLanguages(),
index = languages.indexOf( language );
// Avoid duplicates
languages = $.map( languages, function ( element ) {
return element === language ? undefined : element;
} );
if ( index !== -1 ) {
languages.splice( index, 1 );
}
languages.unshift( language );
mw.uls.setPreviousLanguages( languages );
};
@@ -167,21 +169,17 @@
list = list.concat( $.uls.data.getLanguagesInTerritory( countryCode ) );
}
$.each( list, function ( i, v ) {
if ( $.inArray( v, unique ) === -1 ) {
unique.push( v );
list.forEach( function ( lang ) {
if ( unique.indexOf( lang ) === -1 ) {
unique.push( lang );
}
} );
// Filter out unknown and unsupported languages
unique = $.grep( unique, function ( langCode ) {
unique = unique.filter( function ( langCode ) {
// If the language is already known and defined, just use it.
// $.uls.data.getAutonym will resolve redirects if any.
if ( $.uls.data.getAutonym( langCode ) !== langCode ) {
return true;
}
return false;
return $.uls.data.getAutonym( langCode ) !== langCode;
} );
return unique;