我对for loop
在JS工作的方式有误解......
对于这个数组:
var names = [
{
"firstName" : "Tom",
"LastName" : "Delavoir"
},
{
"firstName" : "Yop",
"LastName" : "laboum"
},
{
"firstName" : "Andrea",
"LastName" : "hop"
}
];
以下此功能适用于第一个firstName
,但从不检查数组names
中的下一个元素。
function ifExist(firstName, prop){
for (var i=0; i < names.length; i++) {
if (firstName == names[i].firstName){
return true;
} else {
return false;
}
}
}
这将始终返回true
,ifExist("Tom", "LastName");
但这始终会返回false
,ifExist("Yop", "LastName");
我可以全神贯注地检查所有names[i].firstName
以验证参数ifExist()
中的第一个是否为真,而不仅仅是表格的第一个元素......
答案 0 :(得分:2)
那是因为你在第一次迭代时返回,给你的循环没有机会循环。
请注意,您可以使用一些更简单的方法来执行您想要的操作,例如使用some()
var names = [
{
"firstName" : "Tom",
"LastName" : "Delavoir"
},
{
"firstName" : "Yop",
"LastName" : "laboum"
},
{
"firstName" : "Andrea",
"LastName" : "hop"
}
];
function exists(arr, myName, prop) {
return arr.some(v => v[prop] === myName);
}
console.log(exists(names, "Yop", "firstName"));
答案 1 :(得分:1)
在循环完成后你需要return false
,否则你永远不会通过你的数组经过一次迭代。您每次都使用firstName
作为属性,而不是使用动态字符串prop
(这要求您在函数调用中将LastName
更改为firstName
。
var names = [
{
"firstName" : "Tom",
"LastName" : "Delavoir"
},
{
"firstName" : "Yop",
"LastName" : "laboum"
},
{
"firstName" : "Andrea",
"LastName" : "hop"
}
]
function ifExist (value, prop){
for (var i = 0; i < names.length; i++) {
if (value === names[i][prop]) return true
}
return false
}
console.log(ifExist("Tom", "firstName"))
console.log(ifExist("Yop", "firstName"))
&#13;
答案 2 :(得分:1)
你在第一次迭代中返回true / false,然后循环dosent进一步运行。该函数自己返回。 只需删除else部分并在循环后返回false。
答案 3 :(得分:1)
您在第一次迭代时停止for循环,因为您在true和false情况下返回。你需要这样的东西:
function ifExist(firstName, prop){
for (var i=0; i < names.length; i++) {
if (firstName === names[i].firstName){
return true;
}
}
return false;
}
console.log(ifExist('Tom'))
console.log(ifExist('Yop'))
答案 4 :(得分:1)
让我们解决这个function
function ifExist(firstName, prop){
for (var i=0; i < names.length; i++) {
if (firstName == names[i].firstName){
return true;
} else {
return false;
}
}
}
到这个
function ifExist(search, prop){
for (var i=0; i < names.length; i++) {
if (search == names[i][prop]){
return true;
}
}
return false;
}
修正了什么:
return
编辑了第一次迭代是否匹配,这肯定是你不想要的return
。为了解决这个问题,我在return false;
之后移动了for
,因此您在第一个找到的元素上return true;
,如果找不到任何元素,那么return false
prop
参数,但您从未使用过它。无论firstName
如何,您都检查了prop
。我在检查值prop
修复此问题
答案 5 :(得分:0)
在名字数组的第一次迭代中,值为(firstName == names [i] .firstName) 是真还是假,并根据每种情况函数返回的编写代码,编写如下代码:
var find=false;
for (var i=0; i < names.length; i++) {
if (firstName == names[i].firstName){
find=true;
break;
}
}
return find;