我有一个名为Cards的数组,它在控制台日志上看起来像
Array[3]
0: Object
1: Object
2: Object
每一个都有一个名字:我用它来引用,它想要找到它,引用我所拥有的。
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);
这三个名字是亚当,阿伦·沙米拉,禤浩焯·奥马什,然而,只有找到亚当,我才能找到另外两个,它找不到他们。问题是为什么?
发布于 2016-11-01 02:37:56
如前所述,您的for
循环在第一次迭代后由于else {return false;}
而中断。
此外,您还可以查看Array.find()
或Array.filter
。
array.find
这将返回第一个匹配值或undefined
。
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)
array.filter
这将返回所有匹配的值或[]
。
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)
另外,如果只检查某个值的存在性,甚至可以尝试array.some
。
Array.some
与前面提到的方法不同,这将返回一个布尔值。如果您没有使用“值”,甚至可以使用此方法。
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)
https://stackoverflow.com/questions/40358297
复制