【问题标题】:How to return a specific value when if a value never occurs in an array function?如果数组函数中从未出现值,如何返回特定值?
【发布时间】:2018-10-02 09:13:48
【问题描述】:

当值从未出现在数组中时,尝试让此代码输出 -1。

function IndexOf (array,value) {
  var index = [];
  for (var i = 0; i < array.length; i++)
    if (array[i] === value) {
      index.push(i);
      return index.pop();
} else if (value === undefined) {
      return -1;
}
}

编辑:不允许在这种特殊情况下使用 .indexOf。

编辑 2:对不起,我不是更清楚。我需要返回最后一个匹配的元素而不是第一个。

【问题讨论】:

标签: javascript arrays function


【解决方案1】:

你可以使用 Array 对象的 indexOf 函数。

function checkArray(yourArray, value) {
  if (yourArray.indexOf(value) > -1) {
     // it means the value exists, so it has an index which is greater than -1.
     // action
  } else {
     return -1;
  }
}

【讨论】:

  • 抱歉忘了说。我不能使用 .indexOf
【解决方案2】:

找到元素的last occurrence 的诀窍是使用i--end (array.length-1) 和iterate 回到start 处的start

请参阅returnfor loop 了解更多信息。

// Index Of.
function indexOf(array, value) {
  for (var i = array.length-1; i >= 0; i --) {
    if (array[i] == value) return i
  }
  return -1
}

// Proof.
console.log(indexOf([ 0, 1, 3, 1, 2 ], 1))
console.log(indexOf([ 0, 1, 3, 1, 2 ], 2))
console.log(indexOf([ 0, 1, 3, 1, 2 ], 4))
console.log(indexOf([ 3, 3, 3 ], 3))
console.log(indexOf([], 5))

【讨论】:

  • 对不起,我不是很清楚。我需要返回最后一次出现的值,而不是第一次出现。
  • 太简单了,见上文? @Binny.H
【解决方案3】:

你有

function IndexOf(array, value) {
  // ...
    } else if (value === undefined) {
      return -1;

因此,当提供第二个参数时,-1 将永远不会返回。推送到数组然后立即popping 和returning 也没什么意义 - 只需返回 i 本身。

改为等到所有迭代完成,然后返回 -1。

function IndexOf(array, value) {
  for (var i = 0; i < array.length; i++) {
    if (array[i] === value) return i;
  }
  return -1;
}
console.log(IndexOf([0, 1, 3, 1, 2], 1));
console.log(IndexOf([0, 1, 3, 1, 2], 2));
console.log(IndexOf([0, 1, 3, 1, 2], 3));
console.log(IndexOf([3, 3, 3], 3));
console.log(IndexOf([], 5));

【讨论】:

    【解决方案4】:

    以下代码适用于您的目的,如果在数组中找不到该值,则返回 -1 是唯一的其他返回选项。

    function IndexOf (array,value) {
      var index = [];
      for (var i = 0; i < array.length; i++)
        if (array[i] === value) {
          index.push(i);
          return index.pop();
        }
      return -1
    }
    

    在您的代码中,value 永远不会等于 undefined,而是 value 不在数组中,并且由于缺少处理该条件的 return 语句而返回 undefined。

    【讨论】:

      【解决方案5】:

      试试这个。我希望这会奏效

      function IndexOf(array, value) {
              var index = [];
              for (var i = 0; i < array.length; i++) {
      
                  if (array[i] === value) {
                      index.push(i);
                  }
              }
              if(index.length > 0){
                  return index.length;
              } else{
                  return -1;
              }
          }
          console.log(IndexOf([0, 1, 3, 1, 2], 1));
          console.log(IndexOf([0, 1, 3, 1, 2], 2));
          console.log(IndexOf([0, 1, 3, 1, 2], 3));
          console.log(IndexOf([3, 3, 3], 3));
          console.log(IndexOf([], 5));
      

      【讨论】:

        【解决方案6】:

        希望这个 sn-p 有用

        function IndexOf(array, value) {
          // creating an empty array 
          var index = []; 
          for (var i = 0; i < array.length; i++)
            // if value matches return the index of the first matched element
            if (array[i] === value) {
              return i;
            } 
              return -1
            
        }
        console.log(IndexOf([0, 1, 3, 1, 2], 1));
        console.log(IndexOf([0, 1, 3, 1, 2], 2));
        console.log(IndexOf([0, 1, 3, 1, 2], 3));
        console.log(IndexOf([3, 3, 3], 3));
        console.log(IndexOf([], 5));

        【讨论】:

        • 对不起,我不是更清楚。我需要返回最后一个匹配的元素而不是第一个。所以输出应该如下: console.log(IndexOf([0, 1, 3, 1, 2], 1)); 3 console.log(IndexOf([0, 1, 3, 1, 2], 2)); 4 console.log(IndexOf([0, 1, 3, 1, 2], 3)); -1 console.log(IndexOf([3, 3, 3], 3)); 2 控制台.log(IndexOf([], 5)); -1
        【解决方案7】:
            function IndexOf(array, value) {
              var match = -1;
        
              for (var i = 0; i < array.length; i++)
                if (array[i] === value)
                  match = i;
        
              return match;
            }
        
        console.log(IndexOf([3, 3, 3], 3)); // will return 2 as the last match index is 2
        console.log(IndexOf([1,2,4], 5)); // will return -1 as there is no match
        

        我猜这就是你要找的。​​p>

        【讨论】:

          猜你喜欢
          • 2021-07-20
          • 1970-01-01
          • 2017-02-10
          • 1970-01-01
          • 2015-05-31
          • 2015-11-18
          • 2018-10-10
          • 1970-01-01
          相关资源
          最近更新 更多