【问题标题】:Nodejs array indexof function usageNodejs数组indexof函数用法
【发布时间】:2015-10-12 19:25:40
【问题描述】:

我正在尝试在 nodejs 上开发一个随机类别 ID 生成器函数。首先,我从我的数据库中接收所有现有的类别 ID 并将它们推送到一个数组中,然后我生成一个随机整数(在边界之间),并将随机数与我的 cat id 数组进行比较。我使用 indexof() 函数进行比较,但它总是返回 true;可能是什么问题。这是我的代码;

var random = require("random-js")
var selectCategoryID = "SELECT id from category.category";
var catIdresult = client.querySync(selectCategoryID);
var catIdArray = [];
    catIdresult.forEach(function (row) {
        var catId = row.id;
        catIdArray.push(catId);
    });

    var randomNum = new random()

    var K = randomNum.integer(16777000, 16777999);

   if(catIdArray.indexOf(K)){
       console.log("Error, the id is : " + K);
   }
    else {console.log("Success, the id is : " + K)}

【问题讨论】:

  • 应该是if(catIdArray.indexOf(K) < 0)
  • 不与下面提到的结果相同

标签: arrays node.js random


【解决方案1】:

indexOf 函数返回数组中某个项目的第一个索引,如果没有找到该项目,则返回-1。所以你的代码应该这样做:

if (catIdArray.indexOf(K) === -1) {
   //insert into db
}
else {
   //error
}

您还可以使用map 函数获取所有ID:

catIdArray = catIdresult.map(function(cat) {return +cat.id});

【讨论】:

  • 现在程序总是运行 else 语句,即使它找到匹配项
  • @FatihAktepe 更新了答案,if 中有错误:)
  • 现在总是运行 if 语句 :) 。我在 16777200-16777217 之间没有任何 ID。当我将随机边界写为这些数字时(因此在我的 catIdArray 中将没有 id 作为这些边界之间的数字),程序总是运行 if 语句。我想做的基本事情是,如果程序找到匹配项,则应返回错误,否则应返回成功。所以我可以将成功的 id 插入数据库
  • @FatihAktepe 如果项目不在数组中,indexOf 将返回 -1
  • 也许你有类型问题。数组可能包含整数,您传递给indexOf 的参数可能是字符串
猜你喜欢
  • 2017-12-11
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多