Создание волны строки в Javascript

Я смотрел этот пост, чтобы найти ответ, но ... Я думаю, что все на этом посту столкнулись с тем же сценарием, что и я: scrollToPosition() был полностью проигнорирован по очевидной причине.

Что я использовал?

recyclerView.scrollToPosition(items.size());

... что РАБОТАЕТ?

recyclerView.scrollToPosition(items.size() - 1);
7
задан vahdet 4 March 2019 в 12:24
поделиться

5 ответов

Вы можете взять каждый символ в строке для цикла 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);

0
ответ дан Code_Mode 4 March 2019 в 12:24
поделиться

Я использую традиционные 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)));

0
ответ дан Nikola Lukic 4 March 2019 в 12:24
поделиться

Вы можете использовать внешний цикл для посещения символов, и если найден непробельный символ, создайте новую строку с заглавной буквой в этой позиции.

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; }

0
ответ дан Nina Scholz 4 March 2019 в 12:24
поделиться

Это делает это. Однако, если в вашей строке есть пробелы, она выведет строку без каких-либо «помятых букв» (поскольку также обрабатывается пробел):

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());
[ 114]
0
ответ дан zvona 4 March 2019 в 12:24
поделиться

Я использую модификацию прототипа 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);

0
ответ дан Nikola Lukic 4 March 2019 в 12:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: