JS 中的嵌套对象循环

Nested Object Loop in JS

我正在尝试向嵌套对象添加一系列值,但在使用以下代码中的循环时遇到了一些问题。非常感谢任何帮助。

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});

values 是一个对象。访问 values[x] 将 return 未定义。

您必须使用该对象中的正确键访问它,如下所示。

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 });

您正在尝试使用 x 索引对象 values,这是一个数字。要遍历对象的键,您可以使用 for...in 循环:

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

另一种方法是使用对象解构:

function write(id, values) {
    settings[id] = { ...(settings[id] || {}), ...values };
}

尝试将 Object.keys(values) return 保存在另一个变量中,并在这样的设置中使用它来赋值

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]];
    }
}