javascript - Find index of object in array by key - Stack Overflow

I have an array of objects like somyobj= [{"item1" : info in here},{"item2" : info

I have an array of objects like so

myobj= [{"item1" : info in here},{"item2" : info in here}, {"item3" : info in here}]

I'm trying to modify one, but I only know its key. I need to pinpoint the item1 object so I can change its value (the values are random and I don't know them, so I can't rely upon them).

If I could just get the index of the item it would be pretty easy: myobj[index].value = "newvalue".

Maybe using the index isn't the best way, so if it isn't, I'm open to other ideas.

I was thinking I could try something like

myobj.objectVar

Where objectVar is the key I'm being passed (item1, for example), however this does not work, possibly because it's a variable? Is it possible to use a variable like this maybe?

If it helps, I'm using underscore.js as well.

I have an array of objects like so

myobj= [{"item1" : info in here},{"item2" : info in here}, {"item3" : info in here}]

I'm trying to modify one, but I only know its key. I need to pinpoint the item1 object so I can change its value (the values are random and I don't know them, so I can't rely upon them).

If I could just get the index of the item it would be pretty easy: myobj[index].value = "newvalue".

Maybe using the index isn't the best way, so if it isn't, I'm open to other ideas.

I was thinking I could try something like

myobj.objectVar

Where objectVar is the key I'm being passed (item1, for example), however this does not work, possibly because it's a variable? Is it possible to use a variable like this maybe?

If it helps, I'm using underscore.js as well.

Share Improve this question edited Jan 20, 2021 at 6:27 RedGuy11 3816 silver badges16 bronze badges asked Mar 7, 2015 at 4:25 ajmajmajmaajmajmajma 14.2k25 gold badges83 silver badges138 bronze badges 2
  • 1 Is there a reason you are using a list? Could your data structure be something like myobj = {"item1": something, "item2": something, "item3": something}? – Joseph Commented Mar 7, 2015 at 4:31
  • Yeah, unfortunately i am stuck with this format @Joseph – ajmajmajma Commented Mar 7, 2015 at 4:42
Add a ment  | 

5 Answers 5

Reset to default 4

Your guess at a solution doesn't work because you're not accessing the individual objects, you're accessing an array of objects, each of which has a single property.

To use the data in the format you've got now, you need to iterate over the outer array until you find the object that contains the key you're after, and then modify its value.

myobj= [{"item1" : info in here},{"item2" : info in here}, {"item3" : info in here}]

function setByKey(key, value) {
  myObj.forEach(function (obj) {
    // only works if your object's values are truthy
    if (obj[key]) {
      obj[key] = value;
    }
  });
}

setByKey('item1', 'new value');

Of course, the far better solution is to stop using an array of single-property objects, and just use one object with multiple properties:

myobj= {"item1" : info in here, "item2" : info in here, "item3" : info in here};

Now, you can simply use myObject.item1 = "some new value" and it will work fine.

You can write a function like,

function getElementsHavingKey(key) {
        var objectsHavingGivenKey = [];

        //loop through all the objects in the array 'myobj'

        myobj.forEach(function(individualObject) {

            //you can use 'hasOwnProperty' method to find whether the provided key 
            // is present in the object or not

            if(individualObject.hasOwnProperty(key)) {

                // if the key is present, store the object having the key 
                // into the array (many objects may have same key in it)

                objectsHavingGivenKey.push(individualObject);
            }
        });

        // return the array containing the objects having the keys

        return objectsHavingGivenKey;
}

If you only want to get the index of elements having the given key

You can do something like this,

function getIndexesOfElementsHavingKey(key) {
        var objectsHavingGivenKey = [];

        //loop through all the objects in the array 'myobj'

        myobj.forEach(function(individualObject, index) {

            //you can use 'hasOwnProperty' method to find whether the provided key 
            // is present in the object or not

            if(individualObject.hasOwnProperty(key)) {

                //push index of element which has the key

                objectsHavingGivenKey.push(index);
            }
        });

        // returns the array of element indexes which has the key
        return objectsHavingGivenKey;
}

Try this code:

function changeObj( obj, key, newval )
{
    for( var i=0, l=obj.length; i<j; i++)
    {
        if( key in obj[i] )
        {
            obj[i] = newval;
            return;
        }
    }
}
var myObjArray= [{"item1" : "info in here"},{"item2" : "info in here"}, {"item3" : "info in here"}]

To find and add new value to the object inside an array:

myObjArray.forEach(function(obj) {
    for(var key in obj) {
         // in case you're matching key & value
         if(key === "item1") {
             obj[key] = "update value";
             // you can even set new property as well
             obj.newkey = "New value";
         }
    }
 });

You can access objects the same using their index, even the object inside the original object.

Is this kind of what your looking for:

var otherObj = [{"oitem":"oValue"}];
var myobj= [{"item1" : otherObj},{"item2" : "2"}, {"item3" : "tesT"}];
myobj[0].item1[0].oitem = "newvalue"; 
alert(myobj[0].item1[0].oitem);

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744963922a4603558.html

相关推荐

  • javascript - Find index of object in array by key - Stack Overflow

    I have an array of objects like somyobj= [{"item1" : info in here},{"item2" : info

    1天前
    40

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信