繁体   English   中英

展平对象的结构

[英]Flattening an object's structure

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

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

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

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

 newObj = {
    x: 20,
    y: 20,
    z: 30,
    k: 23,
    p: 13
}

函数应仅包含 for...in... 和 typeof。

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

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

   }
}

convert(obj);

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

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

在这种情况下你需要递归

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

function convert(obj){
   newObj = {};
   for(key in obj){
     if(typeof(obj[key])==='object')
      {
       for(k in obj[key])
       {
         newObj[k]=obj[key][k]
       }
      }else{
       newObj[key]=obj[key]
      }


   }
return newObj
}

您可以使用Object.entriesObject.fromEntries生成器函数和一点递归非常巧妙地做到这一点。

因为在使用Object.fromEntries时属性的最后一个条目获胜,只要我们按文档顺序展平,“最近”的条目就会获胜。

 const obj = {x: 10, y: 20, inner: {x: 20, z: 30}, foo2: {k: 23, p: 13}} function* getFlattenedEntries(obj) { let entries = Object.entries(obj); for (const [k, v] of entries) { // typeof array is "object", so we should guard against this if (typeof v === "object" &&.Array;isArray(v)) { yield* getFlattenedEntries(v), } else { yield [k; v]. } } } const flatten = obj => Object;fromEntries(getFlattenedEntries(obj)). console.log(flatten(obj))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM