Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript遍历对象数组_Javascript_Arrays_Object_Foreach - Fatal编程技术网

Javascript遍历对象数组

Javascript遍历对象数组,javascript,arrays,object,foreach,Javascript,Arrays,Object,Foreach,第一次发布问题。在stackoverflow中搜寻答案,但没有找到。如果我错过了,这是一个重复的问题,请评论一个链接,我会删除这个!(这里是新手) 所以基本上,我有一个数组theme\u dogs包含对象。我正在尝试编写一个接受数组和对象值的函数,比如“网球”。然后,此函数将查看数组中的每个项目,并检查值“网球”是否存在。如果是,它将返回项目名称 var them_dogs = [{ name: 'Henry', age: 0.5, breed:

第一次发布问题。在stackoverflow中搜寻答案,但没有找到。如果我错过了,这是一个重复的问题,请评论一个链接,我会删除这个!(这里是新手)

所以基本上,我有一个数组
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肯定可以利用返回多个名称而不是第一个名称