Я смотрел этот пост, чтобы найти ответ, но ... Я думаю, что все на этом посту столкнулись с тем же сценарием, что и я: scrollToPosition()
был полностью проигнорирован по очевидной причине.
Что я использовал?
recyclerView.scrollToPosition(items.size());
... что РАБОТАЕТ?
recyclerView.scrollToPosition(items.size() - 1);
Вы можете взять каждый символ в строке для цикла for и сделать его заглавным, а затем добавить префикс и строку после исправления
var array=[];
const wave = (str) => {
if(typeof str === 'string' && str === str.toLowerCase()){
for (let index = 0; index < str.length; index++) {
if (str[index] === ' ') continue;
waveChar=str.charAt(index).toUpperCase();
preStr=str.substring(0,index);
postStr=str.substring(index,str.length-1);
array.push(preStr+waveChar+postStr);
}
}else{
alert(`${str} is either not a string or not lowercase`);
}
}
wave("hello");
console.log(array);
Я использую традиционные JS. Это работает на 99% от сегодняшних браузеров.
Где ответ очень прагматичный. Я использую доступ к массиву для строки;
Магия - это "String.fromCharCode (str.charCodeAt (x) ^ 32);" Делайте все наоборот, когда мы называем эту строку.
// Also tested UTF-8 non english chars
var index = 0;
var mydata= "helloçφšteti";
function wave (str){
var FINAL = [];
var newString = "";
for (var j =0; j < str.length; j++) {
for (var x =0; x < str.length; x++) {
var rez = "";
if (x == index) {
rez = String.fromCharCode(str.charCodeAt(x) ^ 32);
} else {
rez = str[x];
}
newString += rez ;
}
FINAL.push(newString);
newString = "";
index++;
}
return FINAL;
}
var rezArray = wave(mydata);
console.log(rezArray);
// Just for teory
console.log(Array.from([1, 2, 3], x => console.log(x)));
Вы можете использовать внешний цикл для посещения символов, и если найден непробельный символ, создайте новую строку с заглавной буквой в этой позиции.
function wave(string) {
var result = [],
i;
for (i = 0; i < string.length; i++) {
if (string[i] === ' ') continue;
result.push(Array.from(string, (c, j) => i === j ? c.toUpperCase() : c).join(''));
}
return result;
}
console.log(wave("hello")); // ["Hello", "hEllo", "heLlo", "helLo", "hellO"]
console.log(wave(" h e y ")); // [" H e y ", " h E y ", " h e Y "]
console.log(wave("")); // []
.as-console-wrapper { max-height: 100% !important; top: 0; }
Это делает это. Однако, если в вашей строке есть пробелы, она выведет строку без каких-либо «помятых букв» (поскольку также обрабатывается пробел):
const wave = (str = '') => {
return str
.split('')
.map((letter, i, arr) => `${arr.slice(0, i)}${letter.toUpperCase()}${arr.slice(i + 1, arr.length)}`.replace(/,/g, ''));
}
console.log(wave('wave'));
console.log(wave('foo bar'));
console.log(wave());
Я использую модификацию прототипа String:
для реализации замены.
// Modify prototype
String.prototype.replaceAt=function(index, replacement) {
return this.substr(0, index) + replacement+ this.substr(index + replacement.length);
}
function WaveFunction(str) {
var base = str;
var R = [];
var n =str.length;
for (var i=0 ; i<n ;i++){
str = base;
var c=str.charAt(i);
var res = c.toUpperCase();
// console.log(res);
str = str.replaceAt(i, res);
R.push(str);
}
return R;
}
var REZ = WaveFunction("hello");
console.log(REZ);