Javascript遍历对象数组
第一次发布问题。在stackoverflow中搜寻答案,但没有找到。如果我错过了,这是一个重复的问题,请评论一个链接,我会删除这个!(这里是新手) 所以基本上,我有一个数组Javascript遍历对象数组,javascript,arrays,object,foreach,Javascript,Arrays,Object,Foreach,第一次发布问题。在stackoverflow中搜寻答案,但没有找到。如果我错过了,这是一个重复的问题,请评论一个链接,我会删除这个!(这里是新手) 所以基本上,我有一个数组theme\u dogs包含对象。我正在尝试编写一个接受数组和对象值的函数,比如“网球”。然后,此函数将查看数组中的每个项目,并检查值“网球”是否存在。如果是,它将返回项目名称 var them_dogs = [{ name: 'Henry', age: 0.5, breed:
theme\u dogs
包含对象。我正在尝试编写一个接受数组和对象值的函数,比如“网球”
。然后,此函数将查看数组中的每个项目,并检查值“网球”
是否存在。如果是,它将返回项目名称
var them_dogs = [{
name: 'Henry',
age: 0.5,
breed: 'Aussie',
food: 'kibble',
toys: ['tennis ball', 'chew toy'],
picture: 'http://rubyriverminiaustralianshepherds.com/wp-content/uploads/aussie-puppy-for-sale-940x412.jpg'
}, {
name: 'Tilly',
age: 5,
breed: 'Mutt',
food: 'kibble',
toys: ['bone', 'kong', 'squeaky toy'],
picture: 'http://www.dogchannel.com/images/zones/top_promo/excited-mixed-breed.jpg'
}, {
name: 'Apollo',
age: 10,
breed: 'Labrador',
food: 'absolutely anything',
toys: ['old sock', 'other old sock', 'more old socks'],
picture: 'http://media.cmgdigital.com/shared/img/photos/2014/08/01/5a/66/LadyLabrador.jpg'
}]
下面是函数
var findDogByToy = function (arr, toyname) {
arr.forEach (function (item) {
if (item.toys === toyname) {
return item.name;
}
})
}
findDogByToy(them_dogs, 'tennis ball');
every
而不是forEach
<代码>每个都比较干净,因为您不想修改任何元素。此外,要打破一个forEach
,难度更大。看indexOf
检测toys
数组中是否存在toyname
findDogByToy
需要实际返回一个值以使调用方受益var-this\u-dogs=[{
名字:'亨利',
年龄:0.5岁,
品种:“澳洲人”,
食物:“kibble”,
玩具:[“网球”、“咀嚼玩具”],
图片:'http://rubyriverminiaustralianshepherds.com/wp-content/uploads/aussie-puppy-for-sale-940x412.jpg'
}, {
名字:“蒂莉”,
年龄:5岁,
品种:'杂种',
食物:“kibble”,
玩具:[“骨头”、“金刚”、“吱吱作响的玩具”],
图片:'http://www.dogchannel.com/images/zones/top_promo/excited-mixed-breed.jpg'
}, {
名称:“阿波罗”,
年龄:10岁,
品种:'拉布拉多',
食物:“绝对是任何东西”,
玩具:[“旧袜子”、“其他旧袜子”、“更多旧袜子”],
图片:'http://media.cmgdigital.com/shared/img/photos/2014/08/01/5a/66/LadyLabrador.jpg'
}];
var findDogByToy=函数(arr,toyname){
变量名;
arr.every(功能(项目){
if(项目.玩具.索引of(toyname)>-1){
name=item.name;
返回false;
}
});
返回名称;
}
console.log(findDogByToy(它们是狗,网球)代码>我认为您可能需要使用filter()和map(),而不是forEach()。这样,如果您有多个,您将得到一个名称数组
var-this\u-dogs=[{
名字:'亨利',
年龄:0.5岁,
品种:“澳洲人”,
食物:“kibble”,
玩具:[“网球”、“咀嚼玩具”],
图片:'http://rubyriverminiaustralianshepherds.com/wp-content/uploads/aussie-puppy-for-sale-940x412.jpg'
}, {
名字:“蒂莉”,
年龄:5岁,
品种:'杂种',
食物:“kibble”,
玩具:[“骨头”、“金刚”、“吱吱作响的玩具”],
图片:'http://www.dogchannel.com/images/zones/top_promo/excited-mixed-breed.jpg'
}, {
名称:“阿波罗”,
年龄:10岁,
品种:'拉布拉多',
食物:“绝对是任何东西”,
玩具:[“旧袜子”、“其他旧袜子”、“更多旧袜子”],
图片:'http://media.cmgdigital.com/shared/img/photos/2014/08/01/5a/66/LadyLabrador.jpg'
}]
var findDogByToy=函数(arr,toyname){
返回arr.filter(函数(项){
返回项目。玩具。索引(toyname)>-1;
}).map(函数(o){return o.name;});
}
console.log(findDogByToy(它们是狗,网球)代码>正如其他人所提到的,使用forEach解决此问题是一种幼稚的方法,但是对于数组函数的初学者,此解释可能有助于您理解:
function findDogByToy(array, toy) {
// loop across each item in the array
var result;
array.forEach(function(dog) {
// check that item (which is an object) to see if toy is in there
dog.toys.forEach(function(item) {
//if it is, then return item name
if (item === toy) {
result = dog.name;
}
});
});
return result;
}
当您想要查找一个项目时,使用forEach不是正确的解决方案。如果两个动物有相同的玩具会发生什么?@epascarello,说得对。总是这样!;)使用filter
的方法很好,是的,OP肯定可以利用返回多个名称而不是第一个名称