javascript - 如何获取输出 { a : 123, bcde : 4, f : 5, gh : 67, };在 JavaScript 中

标签 javascript arrays

const input = {
   a: [1, 2, 3],
   b: {
    c: {
     d: {
       e: 4,
     },
    }, 
  }, 
 f: 5,
 g: {
   h: [6, 7],
 },  
};

const outPut = {
 a: 123,
 bcde: 4,
 f: 5,
 gh: 67,
}; 

const getAllKeysOfObject = (obj, key) => {
   let tempKey = key;
   let nextKey = ''
   if (obj instanceof Object && Object.values(obj).length > 0) {
      nextKey = Object.values(obj)[0]     
      tempKey += nextKey;
      getAllKeysOfObject(obj[nextKey], nextKey)
   } else {
     return {key: tempKey, value: obj[nextKey]}
   } 
 }

const getObject = (input) => {
   let tempObj = {}
   Object.keys(input).forEach(key => {
   let value = input[key]  //[1,2]
   console.log(value)
   if (Array.isArray(value)) {
      let tempStr = ''
      for(let i =0;i<value.length;i++) {
         tempStr += value[i]
      }
      tempObj[key] = tempStr;
   } else if (input[key] instanceof Object && Object.values(input[key]).length > 0) {
     let newObj = getAllKeysOfObject(input[key], key)
     tempObj[newObj.key] = newobj.value 
   } else {
     tempObj[key] = input[key]
   }
  })
  return tempObj
}

console.log(getObject(input))

如何获取输出 { a: 123, BCDE: 4, f: 5, 高度:67, };在 JavaScript 中

上面的代码没有按预期工作,按键工作正常,但嵌套对象失败。收到错误 Uncaught TypeError:无法读取未定义的属性(读取 '')"

JSFiddle 链接 https://jsfiddle.net/ankitg1602/5v2gp64r/49/

最佳答案

您可以使用reduce方法创建递归函数,如果当前值不是对象,则添加到累加器参数,并跟踪以前的键并将它们传递下来。

const input = {
  a: [1, 2, 3],
  b: {
    c: {
      d: {
        e: 4,
      },
    },
  },
  f: 5,
  g: {
    h: [6, 7],
  },
};

function getOutput(data, pk = '') {
  return Object.entries(data).reduce((r, [k, v]) => {
    const key = pk + k

    if (typeof v === 'object' && !Array.isArray(v)) {
      Object.assign(r, getOutput(v, key))
    } else {
      r[key] = Array.isArray(v) ? Number(v.join('')) : v
    }

    return r;
  }, {})
}

console.log(getOutput(input))

关于javascript - 如何获取输出 { a : 123, bcde : 4, f : 5, gh : 67, };在 JavaScript 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70625074/

相关文章:

javascript - 编辑卡图 map 上的工具提示

arrays - 如何在二维数组中存储一定范围的列值

javascript - .reduce() 函数如何与 Javascript 中的 Math.max() 一起使用?

php - Laravel 中如何存储数组?

arrays - 吸引力作为编码

c - 使用指针对整数数组进行排序

javascript - 如何在文档准备好时折叠 Accordion

javascript - JS Canvas : lineTo()

javascript - 在 react 中将元素删除到状态列表

javascript - YUI 压缩器 : Found an undeclared symbol