到目前为止,我有:
function pigIt(str) {
//split string into array of words
let words = str.split(" ");
//loop through array of words
for (let i = 0; i < words.length; i++) {
//loop through individual words
for (let j = 0; j < words.length; j++) {
//get first word in words
let firstWord = words[0];
//get first character in first word
let firstChar = firstWord[0];
//Create new word without first character
let unshiftedWord = firstWord.unshift(0);
//move first character to the end
let newWord = unshiftedWord.push(firstChar) + "ay";
return newWord;
}
}
}
console.log(pigIt('Pig latin is cool'));
现在,我只想返回"igPay"
。然后,我将这些字符串组合在一起以形成一个新的字符串。
但是它不喜欢firstWord.unshift(0);
。就是说:
TypeError:firstWord.unshift不是函数。
但是.unshift()is a function吗?为什么这样不起作用?
一旦我得到一个新单词,我应该能够将newWords
组合成一个newString
,尽管可能有比为每个单词创建新的for循环更有效的方法。
https://www.codewars.com/kata/520b9d2ad5c005041100000f/train/javascript
编辑:我希望使用传统的函数声明而不是箭头符号来编写此函数。
编辑2 实现@Ori Drori的代码后,我的功能如下:
function pigIt(str) {
newString = str.replace(/(\S)(\S+)/g, '$2$1ay');
return newString;
}
console.log(pigIt('Pig latin is cool'));
它可以正常工作-但我不知道str.replace(/(\S)(\S+)/g, '$2$1ay');
在做什么。
答案 0 :(得分:2)
unshift
不是字符串的方法
您可以简单地在空间上分割,然后映射并交换位置,并添加ay
并再次将它们与空间连接起来。
let str = `Pig latin is cool`
let op = str.split(' ').map(e=> e.substr(1,) +e[0] + 'ay').join(' ')
console.log(op)
没有箭头功能
let str = `Pig latin is cool`
let op = str.split(' ').map(function(e){
return e.substr(1,) +e[0] + 'ay'
}).join(' ')
console.log(op)
答案 1 :(得分:2)
您可以使用RegExp(regex101)和String.replace()
。正则表达式捕获每个单词(实际上是非空格值的序列)的开头(第一个字母)和结尾(其他字母)。使用替换($2$1ay
)重建猪拉丁语中的单词。
const pigIt = (str) => str.replace(/(\w)(\w+)/g, '$2$1ay')
console.log(pigIt('Pig latin is cool'));
替换如何工作:
\w
)并将其分配给$1
$2
注意:我已经使用\S
来捕获所有非空格字符。
答案 2 :(得分:2)
一种更简单的方法是使用map()
和join()
。
注意:根据代码战示例,仅ay
被添加到包含!
的字母缩写的字符串中。因此,您应该使用test()
测试array的元素是否为aplhabet。
通过代码战中的所有测试以获取以下解决方案。
function pigIt(str){
return str.split(' ').map(x =>/[a-zA-Z]+/.test(x) ? x.slice(1)+x[0]+'ay' : x).join(' ');
}
console.log(pigIt('Pig latin is cool'));
function pigIt(str){
return str.split(' ').map(function(x){
return /[a-zA-Z]+/.test(x) ? x.slice(1)+x[0]+'ay' : x;
}).join(' ');
}
console.log(pigIt('Pig latin is cool'));
for
循环以下是使用简单for
循环的代码
function pigIt(str){
str = str.split(' ');
for(let i = 0;i<str.length;i++){
if(/[a-zA-Z]/.test(str[i])){
str[i] = str[i].slice(1) + str[i][0] + 'ay';
}
}
return str.join(' ');
}
console.log(pigIt('Pig latin is cool'));