在for循环javascript中使用数组中的对象

时间:2016-08-23 14:04:44

标签: javascript loops

在下面的代码中,我有一个数组,其中包含每个包含另一个对象的对象。我想做一个for循环,它针对最里面对象中的一个元素。

var myArray = [
    {nemo : {type: "fish", scales: "yes"}}, 
    {bubbles : {type: "fish", scales: "yes"}}, 
    {jimmy : {type: "turtle", scales: "no"}}
];
function findType (array, animalType) {
    var newArray = [];
    for (i = 0; i < array.length; i ++){
        if (array[i][*what goes here?*].type == animalType){
            newArray.push(array[i]);
        }
    }
        return newArray;
}
findType(myArray, "fish");

我遇到的问题是要达到我想要的水平(即nemo,bubbles)的水平,需要在for循环的每个循环中知道,这些名称各不相同时间。什么方法可以通过这个级别进入我想要的对象?谢谢。

5 个答案:

答案 0 :(得分:2)

我建议稍微重构一下代码,以及你的对象。相反,使名称指向一个对象,例如, {nemo : {type: "fish", scales: "yes"}},将名称作为属性。因此,将其更改为:{name: "nemo", type: "fish", scales: "yes"}这不仅可以更轻松地访问每个媒体资源,还可以让您的代码更加清晰。

这样,您的代码就变成了:

var myArray = [{name: "nemo",type: "fish", scales: "yes"}, 
 {name: "bubbles",type: "fish", scales: "yes"}, 
 {name: "jimmy",type: "turtle", scales: "no"}];


 function findType (array, animalType) {
  var newArray = [];
  for (i = 0; i < array.length; i ++){
    if (array[i].type == animalType){
       newArray.push(array[i]);
    }
     return newArray;
   }

  findType(myArray, "fish");

如果你不能对鱼类物体进行重组,其他人就提供了解决问题的答案,而无需重组对象。

答案 1 :(得分:2)

您可以使用Object.keys()

获取对象属性的列表

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

在您的情况下,您可以:

    if (array[i][Object.keys(array[i])[0]].type == animalType){

    //you can see it like this for the first fish :
    //array[i] ---> {nemo : {type: "fish", scales: "yes"}}
    //Object.keys(array[i]) ---> ["nemo"]
    //array[i]["nemo"] ---> {type: "fish", scales: "yes"}

但我同意其他人可能会考虑更改您的数据结构。

答案 2 :(得分:0)

您可以使用for ... in遍历对象键值,然后检查hasOwnProperty以确保其定义的键值。

然后,对于每个人,您可以检查类型。

function findType (array, animalType) {
    var newArray = [];
    for (i = 0; i < array.length; i ++){
        for (var key in array[i]) {
            if( array[i].hasOwnProperty(key) ) {
                if(array[i][key].type === animalType) {
                   newArray.push(array[i]);
                }
            } 
        }  
    }
    return newArray;
}

这是工作jsfiddle:https://jsfiddle.net/9kt64d21/

答案 3 :(得分:0)

尝试使用双循环

var myArray = [{nemo : {type: "fish", scales: "yes"}}, 
{bubbles : {type: "fish", scales: "yes"}}, 
{jimmy : {type: "turtle", scales: "no"}}];


function findType (array, animalType) {
     var newArray = [];
     for (i = 0; i < array.length; i ++){
            for(var name in array[i]){
               if(array[i][name].type == animalType){
                   newArray.push(array[i]);
            }
         }
     }
     return newArray;
};

console.log(findType(myArray, "fish"));

fiddle link

答案 4 :(得分:0)

使用for <key> in <object>

&#13;
&#13;
var myArray = [{nemo : {type: "fish", scales: "yes"}}, 
{bubbles : {type: "fish", scales: "yes"}}, 
{jimmy : {type: "turtle", scales: "no"}}];


function findType (array, animalType) {
  var newArray = [];
  for (i = 0; i < array.length; i ++){
    var animal = array[i];
    for (var key in animal) {
      var description = animal[key];
      if( description.type == animalType ) {
        console.log("" + key + " is a " + animalType);
        newArray.push(array[i]);
      } 
    }  
  }
  return newArray;
}

var fish = findType(myArray, "fish");
console.log("" + fish.length + " fish found.");
&#13;
&#13;
&#13;