我有一个数组,我想从中删除所有的字符串元素。 这就是我到目前为止所拥有的。结果不是我想要的,因为它只返回“自行车”
另外,我在测试完成中这样做,所以我需要一个记录结果的主函数。
function ex06(){
var mailBox = "mailbox";
var twenty = 20;
var isItRaining = true;
var goat = "";
var stringsArray = ["bicycle", "pocket", 3, mailBox, twenty, isItRaining, goat];
var result = removeStrings();
Log.Message("stringsArray looks like this after the removal of all the string elements: " + result);
function removeStrings(){
var i;
var x
for(i = 0; i < stringsArray.length; i++){
if (typeof(stringsArray[i]) === 'string'){
x = stringsArray.splice(i, 1);
return x;
}
}
}
}
答案 0 :(得分:1)
您需要减少var a = [1,2,"3", "4", true];
for( var counter = 0; counter < a.length; counter++)
{
if ( (typeof a[ counter ] ) == "string" )
{
a.splice(counter,1); counter--;
}
}
console.log(a); //output [1, 2, true]
变量并检查原始数组
试试这个简单的例子
use Symfony\Component\HttpFoundation\Request;
public function myAction(Request $request)
{
if ($request->query->has('delete')) // For GET form
{
// ...
}
if ($request->request->get('delete')) // For POST form
{
// ...
}
}
答案 1 :(得分:1)
版本1,带有Array#filter
var a = [1, 2, "3", "4", true];
a = a.filter(function (e) {
return typeof e !== 'string';
});
document.write('<pre>' + JSON.stringify(a, 0, 4) + '</pre>');
版本2,使用Array#splice并向后运行。
var a = [1, 2, "3", "4", true],
i = a.length;
while (i--) {
if (typeof a[i] === 'string') {
a.splice(i, 1);
}
}
document.write('<pre>' + JSON.stringify(a, 0, 4) + '</pre>');
答案 2 :(得分:0)
您需要Array.prototype.filter方法:
var stringsArray = ["bicycle", "pocket", 3, mailBox, twenty, isItRaining, goat];
var result = stringsArray.filter(function(element) {
return typeof element !== 'string';
});
答案 3 :(得分:0)
我认为这是一个练习,这就是你没有使用Array#filter
的原因。
问题是你的return x
里面有for
你的removeStrings
循环,所以你返回找到的第一个字符串。
您至少有三个选择:
不要返回任何内容,因为return x;
正在修改原始数组。这很简单:只需删除x = []
行。
不要修改原始数组;相反,创建并返回一个新的数组,其中省略了字符串。在这种情况下,您需要在循环播放前的splice
开始,移除x
调用,然后将任何非字符串推送到return x
。
修改原始数组,然后创建并返回一个包含已删除字符串的新数组。在这种情况下,您需要从循环内删除x = []
,在循环前设置x
,然后将删除的条目推送到return x
。最后是for
。
在您修改原始文件的任何地方,请注意gurvinder372's point当您删除条目时,您不需要增加索引计数器,因为您最终会跳过下一个条目。 / p>
但是,我不会按照他建议的方式这样做;当我循环修改数组时,while
不是我想要达到的,我到达i = 0;
while (i < stringsArray.length) {
if (typeof stringsArray[i] === 'string'){
stringsArray.splice(i, 1);
// We leave `i` alone here, because we need to process
// the new `stringsArray[i]` on the next pass
} else {
// Didn't remove this entry, move past it
++i;
}
}
:
typeof
旁注:()
不是函数,它是一个运算符,不需要将其操作数放在if (typeof stringsArray[i] === 'string'){
中:
php
答案 4 :(得分:0)
试试这段代码:
function ex06(){
var mailBox = "mailbox";
var twenty = 20;
var isItRaining = true;
var goat = "";
var stringsArray = ["bicycle", "pocket", 3, mailBox, twenty, isItRaining, goat];
var result = removeStrings();
Log.Message("stringsArray looks like this after the removal of all the string elements: " + result);
function removeStrings(){
var newarray = [];
var i;
var x
for(i = 0; i < stringsArray.length; i++){
if (typeof(stringsArray[i]) !== 'string'){
newarray.push(stringsArray[i]);
}
}
return newarray
}
}
答案 5 :(得分:0)
JavaScript提供了过滤数组的本机方法,因此您可以更轻松地删除字符串元素:Array.prototype.filter可以使过程变得更加容易(并且在循环中使用拼接时防止出现奇怪的行为)。
function ex06(){
var mailBox = "mailbox";
var twenty = 20;
var isItRaining = true;
var goat = "";
var stringsArray = ["bicycle", "pocket", 3, mailBox, twenty, isItRaining, goat];
var result = removeStrings(stringsArray);
Log.Message("stringsArray looks like this after the removal of all the string elements: " + result);
function removeStrings(arrayWithString){
return arrayWithString.filter(function(item) {
return typeof item !== 'string'; // returns only items which are not strings
});
}
}
一小段建议:将数组传入您的函数,而不是从父作用域引用它。这样你就拥有了一个纯粹的,可重复使用的功能(并没有你可能不想要的奇怪副作用)。