检查数组的previous和current元素

时间:2017-12-06 10:42:24

标签: javascript arrays ecmascript-6

想象一下:我有一个数组:["1", "2", "X", ".", "4", "3", "Z", "-", "12"];

我认为我应该使用哪种功能:

  • 在数组中找到第一个 NaN 元素(比如index = 2)并检查下一个(index = 3)是否也是 NaN ,如果是,则从数组中删除index = 2的元素。

因此,转换后的数组的结果应为:["1", "2",".", "4", "3", "-", "12"];

我不想要你的代码,只是建议/帮助如何启动它。

感谢您的回复和帮助。

4 个答案:

答案 0 :(得分:2)

你可以检查数组中是否有两个NaN值。

var array = ["1", "2", "X", ".", "4", "3", "Z", "-", "12"],
    result = array.filter((v, i, a) => !isNaN(v) || !isNaN(a[i + 1]));

console.log(result);

答案 1 :(得分:1)

您可以使用for循环迭代数组并跟踪currentprevious元素。

然后,您可以使用 isNaN 检查这两个值是否为NaN

如果两者都是NaN,您可以使用 splice 删除索引i-1上的项目(相当于previous):



arr = ["1", "2", "X", ".", "4", "3", "Z", "-", "12"];

var previous = null;
for (var i = 0; i < arr.length; i++) {
  var current = arr[i];
  if(isNaN(previous) && isNaN(current)) {
     arr.splice(i-1, 1);
  }
  previous = current;
}

console.log(arr); //[ '1', '2', '.', '4', '3', '-', '12' ]
&#13;
&#13;
&#13;

答案 2 :(得分:1)

您可以使用Array#filter查找当前和下一项是NaN

&#13;
&#13;
const data = ["1", "2", "X", ".", "4", "3", "Z", "-", "12", "END"];

const result = data.filter((c, i, arr) => i + 1 === arr.length || !(isNaN(c) && isNaN(arr[i + 1])));

console.log(result);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您可以递归地执行此操作:

if(sameDate($firstDateTimeObj, $secondDateTimeObj, $ThirdDateTimeObj))
{
   // your code

}

function sameDate (DateTime ...$dates) {

   foreach($dates as $date)
   {
      $test[] = $date->format('Ymd');
   }

   $result = array_unique($test);

   if(count($result) == 1)
   {
      return true;
   {

   return false;

}

array.prototype.findIndex 的可读方式:

var arr = ["1", "2", "X", ".", "4", "3", "Z", "-", "12"];
var i = 0;
function removeFirstNan (arr) {
  for (var i = 0; i < arr.length; i++) {
    if (isNaN(arr[i]) && isNaN(arr[i + 1])) {
      var newArr = [ ...arr.slice(0, i), ...arr.slice(i + 1, arr.length) ];
      return removeFirstNan(newArr);
    }
  }
  return arr;
}

arr = removeFirstNan(arr);
console.log(arr);