我正在尝试创建一个单词反转功能,它将反转字符串中每个单词的字母顺序,而不使用任何循环。
到目前为止,我有这个:
var strFlip = function(str){
splitStr = str.split(" ");{
return;
}
var wordFlip = function reverse(splitStr){
return splitStr.split('').reverse().join('');
};
};
console.log(strFlip("Hello Hannah"));
wordFlip部分正确地反转单个单词的顺序,如果独立于其余代码使用的话。但是,整体代码会不断输出undefined
。我不熟悉Javascript,所以我假设我根本没有注意到一个简单的结构问题。
答案 0 :(得分:2)
通过尝试在函数中嵌套函数来使事情过于复杂。创建一个同时执行单词和字符反转工作的单个函数:
var flipper = function reverse(splitStr) {
return splitStr.split('').reverse().join('').split(' ').reverse().join(' ');
};
alert(flipper("Hello Hannah"));
答案 1 :(得分:2)
好吧,这个部分导致函数立即返回,因为它什么也没有返回,你得到undefined
:
var strFlip = function(str){
splitStr = str.split(" ");{
return; //<-- immediately returns here
}
...
};
我不确定那部分试图做什么,但要实际做你想做的事,你可以这样做:
var strFlip = function(str) {
//Since you are using a variable as a reference to a function
//expression/literal, there is no hoisting so you have to
//predefine
var wordFlip = function reverse(splitStr) {
return splitStr.split('').reverse().join('');
};
return str.split(" ").map(wordFlip).join(" ");
}
更优雅的方法是放弃wordFlip
,只使用匿名回调map
:
var strFlip = function(str) {
return str.split(" ").map(function(word) {
return word.split("").reverse().join("");
}).join(" ");
}
为了理解map
的作用,让forEach
首先查看map
,因为array.forEach(callback)
以类似的方式工作。使用callback
时,会为array
中的每个元素调用函数var array = [1, 2, 3];
for(var i = 0; i < array.length; i++) {
callback(array[i]);
}
。它等同于以下代码:
map
基本上它是一个功能性的&#34;迭代数组并对每个元素执行某些操作的方法。 callback
也这样做;它也遍历数组,但将(映射)数组的每个元素转换为其他,并返回一个 new 数组,其中包含映射元素。 其他由callback
的行为定义。这是一个类似于上面例子的例子。在这里,我还指定了一个实际的var array = [1, 2, 3];
var squares = [];
function square(num) {
return num * num;
}
for(var i = 0; i < array.length; i++) {
squares[i] = square(array[i]);
}
,以便您可以更好地看到行为:
square
此处,callback
与square
相同,并为每个元素调用它。然后使用map
的返回值来构造新数组。使用var squares = array.map(function(num) {
return num * num;
});
,您可以将上述内容重写为:
:contains()
现在将此应用于解决方案,您可以看到我们将句子中的每个单词映射到其反向,然后加入映射的数组。
答案 2 :(得分:2)
你非常接近,但代码有点过分。试试这个:
function reverse(splitStr) {
return splitStr.split('').reverse().join('');
}
console.log(reverse('Hello Hannah'));
我刚从你的代码中取出主要的主力并简化了功能。你走在正确的轨道上,
修改强>
如果你想保留这些词语,就像Vivin建议的那样,你可以这样做:
function reverse(splitStr) {
var strs = splitStr.split(' ');
var reverseInPlace = [];
for (var i = 0; i < strs.length; i++) {
reverseInPlace.push(strs[i].split('').reverse().join(''));
}
return reverseInPlace.join(' ');
}
console.log(reverse('Hello Hannah'));
答案 3 :(得分:0)
一种方法是split
句子为空格,然后reverse
和join
空格split
再用空格reverse
和{{} 1}}空格。
如果你那样做:
join
将转换为"Hello Hannah"
答案 4 :(得分:0)
编辑您可以将原型定义为字符串作为一个行解决方案的扩展。
<!-- Added for Parse push notifications -->
<service android:name="com.parse.PushService" />
<receiver
android:name=".receiver.CustomPushReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="com.parse.push.intent.RECEIVE" />
<action android:name="com.parse.push.intent.DELETE" />
<action android:name="com.parse.push.intent.OPEN" />
</intent-filter>
</receiver>
<receiver
android:name="com.parse.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.parse.starter" />
</intent-filter>
</receiver>
<receiver android:name="com.parse.ParseBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
&#13;