2

I'm trying to add a series of values to a nested object, having some trouble with the loop in the following code. Any help would be really appreciated.

let settings = {};

function write(id, values) {
    if(!settings[id]) settings[id] = {};
    for(var x = 0; x < Object.keys(values).length; x ++) {
        settings[id][values[x]] = values[values[x]];
    }
}

//example
write('example', {'prop1': 5, 'prop2': 10});
2
  • What is the expected output? values[x] is similar to values[0], values is an object. This will fail if values object dont have key 0 Commented Jan 17, 2022 at 6:29
  • It would be better if you could publish the original object and the expected result Commented Jan 17, 2022 at 6:33

3 Answers 3

1

You're attempting to index the object values with x, which is a number. To loop through the keys of your object you can use a for...in loop:

function write(id, values) {
    if(!settings[id]) settings[id] = {};
    for(const key in values) {
        settings[id][key] = values[key];
    }
}

Another approach would be to use object destructuring:

function write(id, values) {
    settings[id] = { ...(settings[id] || {}), ...values };
}
Sign up to request clarification or add additional context in comments.

Comments

0

values is an object. Accessing values[x] will return undefined.

You have to access it with the correct keys in that object as below.

let settings = {};

function write(id, values) {
  if (!settings[id]) settings[id] = {};
  const keys = Object.keys(values);
  for (var x = 0; x < keys.length; x++) {
    settings[id][keys[x]] = values[keys[x]];
  }
  console.log(settings)
}

//example
write('example', { 'prop1': 5, 'prop2': 10 });

Comments

0

try to keep the Object.keys(values) return in another variable and use it to assign value in setting like this

function write(id, values) {
    if(!settings[id]) settings[id] = {};
    const key = Object.keys(values) 
    for(var x = 0; x < key.length; x ++) {
        settings[id][key[x]] = values[key[x]];
    }
}

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.