0

I've got an object which looks like this:

var myObject = {
    array1: [
        {id: "aaa"},
        {id: "bbb"},
        {id: 'ccc'}
    ],
    array2: [
        {id: "ddd"},
        {id: "eee"},
        {id: 'fff'}
    ],
    childObject: {
        property: "value"
    }
};

What I need is a function that gets the name of an array with certain id value. For example:

getArrayName("myObject", "id", "eee") //returns "array2"

because it's always "id" it can be simplified to:

getArrayName("myObject", "ccc") //returns "array1"

I'm using lodash in this project, so I've tried .findKey(), but I can't get it to work.

zorza
  • 2,814
  • 3
  • 27
  • 41

3 Answers3

2

Try this

function getArrayName(myObject, value)
{
  for (  var arrayId in myObject)
  {
    var arr = global[ arrayId ];
    for ( var counter = 0; counter < arr.length; counter++) 
    {
      if ( arr[ counter ].id == value )
      {
        return arrayId ;
      }
    }
  }
  return "";
}
gurvinder372
  • 66,980
  • 10
  • 72
  • 94
1

You can do this and also generalise the parameters you want to search by:

function getArrayName(objName, propKey, propVal) {
    var obj = window[objName];
    var resArray = _.find(obj, function (arr) {
        return _.some(arr, function (arrObj) {
            return arrObj[propKey] === propVal;
        });
    })

    var index = 0;

    for (var key in obj) {
        if (obj[key] === resArray) {
            index = key;
            break;
        }
    }

    return index;
}

getArrayName("myObject", "id", "ccc") //returns "array1"

Fiddle

Omri Aharon
  • 16,959
  • 5
  • 40
  • 58
0
Try this:

<script>
      var myObject = {
    array1: [
        {id: "aaa"},
        {id: "bbb"},
        {id: 'ccc'}
    ],
    array2: [
        {id: "ddd"},
        {id: "eee"},
        {id: 'fff'}
    ],
    childObject: {
        property: "value"
    }
};
function getArrayName(obj,id){
  $.each(obj,function(key,value){
    $.each(obj[key],function(key1,val){
      if(val.id === id)
      alert(JSON.stringify(obj[key]));
    })
  });
}
   getArrayName(myObject,'eee');   
    </script>
Meenakshi
  • 165
  • 1
  • 8