首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组javascript indexOf

数组javascript indexOf
EN

Stack Overflow用户
提问于 2013-07-06 05:38:21
回答 2查看 450关注 0票数 2

我有一个多维数组。我需要某种循环来随机选择数组中的一个字符串,并检查该字符串是否包含字符。如果没有,则重复此步骤,直到找到一个。

我编写了一个for循环来检查数组中的字符串,但它从0开始,遍历数组,直到找到它。我需要它在array...any帮助中随机选择一个字符串?

jsFiddle --> http://jsfiddle.net/hz2MZ/1/

jQuery

代码语言:javascript
复制
$(document).ready(function() {
var myarr = [{"Name":"Bob", "Char":"134"},
           {"Name":"Phil", "Char":"134"},
           {"Name":"Jane", "Char":"1"},
           {"Name":"Don", "Char":"4"},
           {"Name":"Dan", "Char":"2"},
           {"Name":"Jan", "Char":"12"},
           {"Name":"Bill", "Char":"24"},
           {"Name":"Sam", "Char":"14"},
           {"Name":"Jake", "Char":"23"},
           {"Name":"Ben", "Char":"3"}];


$('button').click(function() {
   for(var i = 0; i < myarr.length; i++) {
       if(myarr[i].Char.indexOf('2') !== -1) {
           alert("Name: " + myarr[i].Name + "\nChar: " + myarr[i].Char);
         return;
       } else {}
    } 
});

});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-06 05:47:33

我的解决方案

代码语言:javascript
复制
$('button').click(function () {
        var found = false;

        while (!found) {
            var randomIndex = Math.floor(Math.random() * myarr.length);
            if (myarr[randomIndex].Char.indexOf('2') !== -1) {
                alert("Name: " + myarr[randomIndex].Name + "\nChar: " + myarr[randomIndex].Char);
                found = true;
            } else {}

        }
    });

编辑

更新的死循环问题

代码语言:javascript
复制
$('button').click(function () {
    var found = false;
    var maxRandom = 20;
    var currentRandom = 0;

    while (!found && currentRandom < maxRandom) {
        var randomIndex = Math.floor((Math.random() * myarr.length));
        currentRandom++;

        if (myarr[randomIndex].Char.indexOf('2') !== -1) {
            alert("Name: " + myarr[randomIndex].Name + "\nChar: " + myarr[randomIndex].Char);
            found = true;
        } else {}
    }
}
票数 3
EN

Stack Overflow用户

发布于 2013-07-06 06:36:56

一种方法是复制数组,然后从复制中随机拼接一个成员,并检查所需的值:

代码语言:javascript
复制
function randomValueByChar(arr, c) {
  var a = arr.slice && arr.slice();
  var i = a.length || 0;
  var t;

  while (i--) {
    t = a.splice(Math.random() * i | 0, 1);
    if (t[0].Char.indexOf(c) != -1) return t;  
  }
}

另一种方法是创建一个索引数组(例如[0,1,2,3…]),然后一次随机拼接一个值,并将其用作索引以从数组中检索值。这两种方法都不会有无限循环,每个成员最多访问一次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17497175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档