# Updating Object Key Values with Javascript

[Javascript objects](https://fjolt.com/article/javascript-objects-introduction) consist of key value pairs and are one of the most common data structures in Javascript. 

To update all values in an object, the easiest way is to:
1. Use `Object.keys` to get all keys of the object.
2. Apply any logic, to decide which values should be updated.
3. Update the value of each using a loop like `forEach` or `for`.

For example:
```javascript
let myObject = {
    name: "John", 
    skillItem1: 4,
    skillItem2: 7,
    skillItem3: 2,
    skillItem4: 1
}

// Updates any numerical values that are more than or equal to 4, and changes them to 10:
Object.keys(myObject).forEach((item) => {
    if(typeof myObject[item] == "number" && myObject[item] >= 4) {
        myObject[item] = 10
    }
})

console.log(myObject)
// Returns:
// let myObject = {
//     name: "John", 
//     skillItem1: 10,
//     skillItem2: 10,
//     skillItem3: 2,
//     skillItem4: 1
```

You don't have to apply logic - but it's usually useful. You can also achieve this with a `for` loop - which is slightly faster than using `forEach`:
```javascript

let myObject = {
    name: "John", 
    skillItem1: 4,
    skillItem2: 7,
    skillItem3: 2,
    skillItem4: 1
}

// Updates any numerical values that are more than or equal to 4, and changes them to 10:
for(let item of Object.keys(myObject)) {
    if(typeof myObject[item] == "number" && myObject[item] >= 4) {
        myObject[item] = 10
    }
}

console.log(myObject)
// Returns:
// let myObject = {
//     name: "John", 
//     skillItem1: 10,
//     skillItem2: 10,
//     skillItem3: 2,
//     skillItem4: 1
```

To update only one value in an object, use the square bracket notation `[]` to select which key you want to update. For example:
```javascript
let myObject = {
    name: "John", 
    skillItem1: 4,
    skillItem2: 7,
    skillItem3: 2,
    skillItem4: 1
}

// Updates `skillItem2` to 15
myObject['skillItem2'] = 15;
```

[Javascript objects are created by reference](https://fjolt.com/article/javascript-by-reference-by-value), which is a fancy way of saying that when we make the changes above, we are mutating the original object. That also means that `Object.values()` does not allow us to update the values of the object, which is why we have to use `Object.keys()`.
