我试图遍历该数组的对象元素,并在“ for in”循环找到值“ bill”时返回“ gotcha,bill”。但是,它似乎只返回了“不是他”四次。我已经略读了几次,但不确定自己缺少什么。这是我第一次使用for in循环,因此我可能会误解它的工作方式。
任何帮助将不胜感激!
var names = [{name: 'steven', age: 22}, {name: 'bill', age: 13}];
function findBill(array) {
for(let i = 0; i < array.length; i++) {
for(let key in array[i]) {
if(key === 'bill') {
return console.log('gotcha, bill');
} else {
console.log('not him');
}
}
}
}
findBill(names)
答案 0 :(得分:1)
这里。我将您的for
循环更改为forEach
,但这并不是解决问题的主要方法。这是您访问对象属性的方式。我使用forEach
是因为(对我来说)从对象中获取所需的数据会更容易。
var names = [{name: 'steven', age: 22}, {name: 'bill', age: 13}];
function findBill(array) {
array.forEach(function(person){
if(person.name === 'bill') {
return console.log('gotcha, bill');
} else {
console.log('not him');
}
});
}
findBill(names)
如果您坚持使用for
循环,这应该是这样。
var names = [{name: 'steven', age: 22}, {name: 'bill', age: 13}];
function findBill(array) {
for(let i = 0; i < array.length; i++) {
if(array[i].name === 'bill') {
return console.log('gotcha, bill');
} else {
console.log('not him');
}
}
}
findBill(names)
答案 1 :(得分:1)
key
就是这样-每个对象的键,即name
或age
。您实际上需要以正确的索引索引到数组中,然后使用if (array[i][key] === 'bill')
访问循环中要检查的键的值。
这是一个可行的示例:
var names = [{name: 'steven', age: 22}, {name: 'bill', age: 13}];
function findBill(array) {
for(let i = 0; i < array.length; i++) {
for(let key in array[i]) {
if(array[i][key] === 'bill') {
return console.log('gotcha, bill');
} else {
console.log('not him');
}
}
}
}
findBill(names);
但是,多余的循环不是必需的,并且会导致逻辑错误,因为您可能还有其他一些键,例如buffalo
,而其值恰好是"bill"
,并且最后会出现一个假阳性。您知道键,因此您可以在数组中搜索具有该键的匹配值的任何对象:
var names = [{name: 'steven', age: 22}, {name: 'bill', age: 13}];
console.log(names.find(e => e.name === "bill"));
最后,我建议避免在函数中使用console.log
,它是限制可重用性的side effect。 console.log
在打印后返回undefined
,因此即使在简单的或人为的示例中也要返回该值,这是一种误导。
答案 2 :(得分:1)
您不需要两个循环。实际上,您可以使用Array.find()
方法来找到所需的对象并根据需要进行处理:
const people = [{name: 'steven', age: 22}, {name: 'bill', age: 13}];
const findByName = (data, name) => data.find(cur => cur.name === name);
const Bill = findByName(people, 'bill');
if (Bill === null) { console.log(`could not find bill`); }
else { console.log(`bill is ${Bill.age} years old`); }
答案 3 :(得分:1)
for..in
遍历对象的键。由于bill
是一个值,而不是键,因此(key === 'bill')
测试将永远不会得出true
。
如果您想遍历对象的值,请使用Object.values
,由于听起来您想查找 bill
对象,因此可以使用{{ 1}}:
.find
如果您事先知道该值将在var names = [{name: 'steven', age: 22}, {name: 'bill', age: 13}];
function findBill(array) {
return array.find((obj) => (
Object.values(obj).includes('bill')
))
};
console.log(findBill(names))
属性中,则只需测试该属性,而不要使用name
:
Object.values