按元素

时间:2016-02-23 08:21:41

标签: javascript arrays testcomplete

我有一个数组,我想从中删除所有的字符串元素。 这就是我到目前为止所拥有的。结果不是我想要的,因为它只返回“自行车”

另外,我在测试完成中这样做,所以我需要一个记录结果的主函数。

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

6 个答案:

答案 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循环,所以你返回找到的第一个字符串。

您至少有三个选择:

  1. 不要返回任何内容,因为return x;正在修改原始数组。这很简单:只需删除x = []行。

  2. 不要修改原始数组;相反,创建并返回一个新的数组,其中省略了字符串。在这种情况下,您需要在循环播放前的splice开始,移除x调用,然后将任何非字符串推送到return x

  3. 修改原始数组,然后创建并返回一个包含已删除字符串的新数组。在这种情况下,您需要从循环内删除x = [],在循环前设置x,然后将删除的条目推送到return x。最后是for

  4. 在您修改原始文件的任何地方,请注意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
    });
  }
}

一小段建议:将数组传入您的函数,而不是从父作用域引用它。这样你就拥有了一个纯粹的,可重复使用的功能(并没有你可能不想要的奇怪副作用)。