展平对象的结构

Кар*_*ова 1 javascript function object

社区!请给我一个提示。我有以下任务:

首先,创建一个具有以下结构的对象:

obj = {
       x: 10, 
       y: 20, 
       inner: {
          x: 20, 
          z: 30
            }, 
       foo2: {
          k: 23, 
          p: 13
       }
 } 
Run Code Online (Sandbox Code Playgroud)

编写函数 convert (obj),它得到参数 obj。该函数应该返回一个新对象:

 newObj = {
    x: 20,
    y: 20,
    z: 30,
    k: 23,
    p: 13
}
Run Code Online (Sandbox Code Playgroud)

函数应该只包含 for ... in ... 和 typeof 。

我正在尝试创建此函数,现在将 obj 复制到 newObj:

function convert(obj){
   newObj = {};
   for(key in obj){
      newObj[key] = obj[key];

   }
}

convert(obj);
Run Code Online (Sandbox Code Playgroud)

但我不确定如何使用 typeof 从 obj 中删除内部和 foo2 子对象,并将 x、z、k 和 p 的正确值分配给 newObj。

在课堂上,我们讨论了基本的对象计算,因此不需要花哨的对象方法来解决这个问题。

qiA*_*lex 5

在这种情况下您需要递归

obj = {
   x: 10, 
   y: 20, 
   inner: {
      x: 20, 
      z: 30
        }, 
   foo2: {
      k: 23, 
      p: 13
   }
} 

function convert(obj, newObj) {
  if (!newObj) { // on first iteration creating a result object
    newObj = {}
  }
  for(key in obj){
    if (typeof obj[key] === 'number') { // if number - add, if exist - update
      newObj[key] = obj[key];
    } else { // if object - do the same one more time but for subobject and resulting object
      convert(obj[key], newObj)
    }
  }
  return newObj
}

console.log(convert(obj));
Run Code Online (Sandbox Code Playgroud)

  • @byxor 是的,同意,通常不清楚他们的导师希望如何完成任务 (2认同)