2013-04-27 164 views
9
var sorted = words.map(function(value) { 
    return value.toLowerCase(); 
}).sort(); 

此代码返回从字阵列中的所有值小写和它们进行排序返回所有值从阵列中的小写,但我想要做一个for循环一样,但我不能。使用for循环,而不是地图

我想:

for (var i = 0; i < words.length; i++) { 
    sorted = []; 
    sorted.push(words[i].toLowerCase()); 
}; 
+2

建议供将来参考:当您通过其中一个答案更新问题中的代码时,请不要编辑原始(不正确)代码。相反,保持原始代码不变,并在问题末尾添加一个新的部分,例如“我修改了XYZ答案中建议的代码,但它仍然不起作用,下面是新代码:...”这样问题和答案将对未来的访问者更有意义。 – 2013-04-27 17:57:54

+1

是的,我会的。谢谢。 – 2013-04-27 19:16:43

回答

7

随着阵列中,+=运营商不会做你所期望的 - 它调用数组.toString和连接它们。相反,您要使用array push method

var sorted = []; 
for (var i = 0; i < words.length; i++) { 
    sorted.push(words[i].toLowerCase()); 
} 
sorted.sort(); 
+0

我更新了一些代码(请参阅),但现在它只返回1个元素,而不是全部。 – 2013-04-27 15:31:50

+2

你有循环内的'sorted = [];'它重复覆盖一个新的数组(并且只有最后一个,最后一个项目将被返回)。查看我的答案,了解代码的外观。 – Bergi 2013-04-27 15:45:22

+0

是的,我比较你的代码和我的意识,这是问题所在。谢谢! – 2013-04-27 16:08:11

0

toLowerCase()是功能,你应该写()

+0

愚蠢的错误。仍然没有工作,虽然 – 2013-04-27 15:23:22

0

结果与toLowerCase方法不会被调用在你的代码后,仅参考。在循环更改行:

sorted += words[i].toLowerCase(); 

Add()方法调用的方法。

完整的工作代码:

var words = ["FOO", "BAR"]; 
var sorted = []; 

for (var i = 0; i < words.length; i++) { 

     sorted.push(words[i].toLowerCase()); 
}; 

console.log(sorted); 
0

我假设你正在声明sorted作为数组。如果是使用push方法,而不是+=

for (var i = 0; i < words.length; i++) { 
    sorted.push(words[i].toLowerCase()); 
} 
30

推送被过度使用。

for (var i = 0, L=words.length ; i < L; i++) { 
    sorted[i]=words[i].toLowerCase(); 
} 

如果你想快速有一个非常大阵的话,调用toLowerCase once-

sorted=words.join('|').toLowerCase().split('|'); 
+3

+第二个 – ZuzEL 2014-08-21 19:27:09

+0

不错的加入技巧 – Martial 2015-03-23 14:24:59

1

我知道这是以后的答案,但我发现了一种非常直接和容易!

yourArray = ['this', 'iS an', 'arrAy']; 
console.log(yourArray); // ["this", "iS an", "arrAy"] 

yourLowerArray = yourArray.toLocaleString().toLowerCase().split(','); 
console.log(yourLowerArray); //["this", "is an", "array"] 

解释这是什么一样:

.toLocaleString() - >阵列转换成用逗号分隔的字符串。

.toLowercase() - >将该字符串转换为小写。

.split(',') - >将小写字符串转换回数组。

希望这可以帮助你!

11

,您现在还可以通过使用箭头功能和阵列的map()方法实现这一目标非常简单:

var words = ['Foo','Bar','Fizz','Buzz']; 
 
words = words.map(v => v.toLowerCase()); 
 

 
console.log(words);

请注意,这只会在支持ES2015浏览器。换句话说,除了IE8和更低版本。