繁体   English   中英

从 object 创建变量

[英]create variables from an object

我正在做一个项目,我得到一个 object 这样的输入:

const obj = {
  a: 'somestring',
  b: 42,
  c: {
   d: 'foo',
   e: 'bar'
  },
  f: [1, 2]
};

我需要创建一些变量来访问这个 output:

const a = "somestring"
const b = 42
const c.d = "foo"
const c.e = "bar"
const f[0] = 1
const f[1] = 2

我用这段代码得到了结果:

for (const [k1, v1] of Object.entries(obj)) {
  if (typeof v1 === "object") {
    if (Array.isArray(v1)) {
      for (const [k2, v2] of Object.entries(v1)) {
      console.log(`const ${k1}[${k2}] = ${v2}`);
    }
    } else {
      for (const [k2, v2] of Object.entries(v1)) {
      console.log(`const ${k1}.${k2} = ${v2}`);
    }
    }
  } else {
    console.log(`const ${k1} = ${v1}`);    
  }
}

但是当我得到一个像这样更复杂的 object 时:

const obj = {
  a: [
    { 
      b: 'lorem'
    },
    {
      c: 'ipsum'
    }
  ],
  d: {
    e: {
      f : 'foobar'
    }
  }
};

我的 output 看起来像这样:

const a[0] = [object Object]
const a[1] = [object Object]
const d.e = [object Object]

我找不到任何相关的解决方案。 是否有解决方案或 npm package?

您可以在 JS 中使用eval function 来完成:

 const obj = { a: 'somestring', b: 42, c: { d: 'foo', e: 'bar' }, f: [1, 2] }; var log = console.log; for (let key in obj) { //log(key); eval(`var ${key} = obj.${key}`); } log(a); log(b); log(c); log(f);

有一个叫做解构文档的功能点击这里

正如文档所说,此功能将帮助您从嵌套的 object 创建新变量。

采用嵌套的 object,您可以访问其叶值并将它们直接分配给 vars,如下所示:

 const o = { a: 'a', b: { c: 'c', d: { e: 'e' } } }; const {a,b: { c, d: {e} }} = o; alert(a); alert(c); alert(e);

编辑:它适用于 arrays 以及不仅仅是对象

我想你想要这样的东西:

 const obj = { a: 'somestring', b: 42, c: { d: 'foo', e: 'bar' }, f: [1, 2] }; const parse = (obj, prefix = '', isArray=false) => { Object.entries(obj).forEach(([k, v]) => { if (typeof v === 'object') parse(v, `${k}`, Array.isArray(v)) else { const value = (typeof v === 'string')? `"${v}"`: v; const before = isArray? '[': prefix? '.': ''; const after = isArray? ']': ''; console.log(`const ${prefix}${before}${k}${after} = ${value}`) } }); } parse(obj);

暂无
暂无

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

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