数组对象的for循环函数只找到一个

时间:2016-11-01 10:32:42

标签: javascript arrays for-loop

我有一个名为Cards的数组,在控制台日志中看起来像

    Array[3]
     0: Object
     1: Object
     2: Object

每个都有一个名称:我用它来引用它 想找到它参考我有的obejct

var FoundInArray = [];
        function CheckIndexArray(ArraySearch, array) {
            var i;
            for (i = 0; i < array.length; i++) {
                if (array[i].name === ArraySearch) {
                    FoundInArray = array[i];
                    return true
                    break
               } else {return false;}                    }
        }
         if (CheckIndexArray(document.getElementById("userInput").value, Cards) == true) {
             console.log(FoundInArray);

这3个名字是ADAM,Arron Shamira,Adrian Omarsh,但是如果我搜索其他两个,它只找到ADAM它找不到它们。问题是为什么???

2 个答案:

答案 0 :(得分:1)

如前所述,由于for

,您的else {return false;}循环在第一次迭代后中断

此外,您可以查看Array.find()Array.filter

array.find

这将返回第一个匹配值或undefined

&#13;
&#13;
var arr = [
  {name: 'foo', id:1},
  {name: 'foo', id:2},
  {name: 'bar', id:3},
  {name: 'test', id:4}
]
var searchName = "foo";
var r = arr.find(function(x){ return x.name === searchName});
console.log(r)
&#13;
&#13;
&#13;

array.filter

这将返回所有匹配值或[]

&#13;
&#13;
var arr = [
  {name: 'foo', id:1},
  {name: 'foo', id:2},
  {name: 'bar', id:3},
  {name: 'test', id:4}
]
var searchName = "foo";
var r = arr.filter(function(x){ return x.name === searchName});
console.log(r)
&#13;
&#13;
&#13;

此外,如果目的只是检查是否存在某些值,您甚至可以尝试array.some

Array.some

与前面提到的方法不同,它返回一个布尔值。如果你没有使用价值,你甚至可以使用这种方法。

&#13;
&#13;
var arr = [
  {name: 'foo', id:1},
  {name: 'foo', id:2},
  {name: 'bar', id:3},
  {name: 'test', id:4}
]
var searchName = "foo";
var isAvailable = arr.some(function(x){ return x.name === searchName});
console.log(isAvailable)

searchName = "foo123";
isAvailable = arr.some(function(x){ return x.name === searchName});
console.log(isAvailable)
&#13;
&#13;
&#13;

答案 1 :(得分:0)

问题是return false,它打破了循环。

还有更好的方法来过滤像array.filter()array.find()

这样的数组

src:.filter.find