【问题标题】:how to solve `...` error in nodejs javascript如何解决nodejs javascript中的`...`错误
【发布时间】:2023-03-02 23:31:01
【问题描述】:

我是NodeJS 的新手。 这是代码:

const a = [
    {
        wa_id: 1,
        wa_property_id: 'p1',
        wa_view_name: 'ram',
        wa_view_id:1
    },
    {
        wa_id: 1,
        wa_property_id: 'p1',
        wa_view_name: 'sam',
        wa_view_id:'v2'
    },
    {
        wa_id: 1,
        wa_property_id: 'p2',
        wa_view_name: 'kam',
        wa_view_id:'v3'
    },
    {
        wa_id: 2,
        wa_property_id: 'p5',
        wa_view_name: 'pri',
        wa_view_id:'v4'
    },
    {
        wa_id: 1,
        wa_property_id: 'p3',
        wa_view_name: 'ste',
        wa_view_id:'v5'
    },
];

var result = a.reduce((acc,rec) =>{
//if result object doesn't contain key for wa_id - add new id key
if(!(Object.keys(acc).includes(rec.wa_id.toString())))
{
  return {...acc, [rec.wa_id]: {[rec.wa_property_id]:{[rec.wa_view_id]:rec.wa_view_name}}}
}
//if result id object doesn't contain key for property - add new property key
if(!(Object.keys(acc[rec.wa_id]).includes(rec.wa_property_id.toString())))
{
    // acc[rec.wa_id] = {...acc[rec.wa_id],[rec.wa_property_id]:[rec.wa_view_name] }
    acc[rec.wa_id] = {...acc[rec.wa_id],[rec.wa_property_id]:{[rec.wa_view_id]:rec.wa_view_name} }
  return acc
}
//otherwise add new value to array of properties
acc[rec.wa_id][rec.wa_property_id][rec.wa_view_id] = rec.wa_view_name
return acc
},{})

console.log("Output: ",result)

我收到以下错误。下面的错误图片,

它正在在线Javascript Code Editor 上运行。但在我的系统中,它显示了上述错误。 在网上搜索了一下,我才知道我的nodejs 不支持... 如何让它支持。我正在使用最新的Node JS 版本(我的节点 js 版本:v12.16.1)。帮我解决一些问题。

(base) paulsteven@smackcoders:~/data-filters/flax2.0/flax_back_end$ node -v
v12.16.1

【问题讨论】:

  • 这是否回答了您的问题stackoverflow.com/questions/56003497/…
  • 您使用的是哪个版本的 Node?自 8.3.0 起支持对象字面量中的扩展运算符
  • 你能显示node -v的输出吗,仅供参考,你的代码对我来说很好/
  • @Vivek Molkar,我的节点 js 版本:v12.16.1

标签: javascript arrays node.js json


【解决方案1】:

你必须配置你的 babel 脚本。

Step1 : 使用安装模块

npm install --save-dev babel-plugin-transform-object-rest-spread.

第二步:在你的 babel 配置文件中添加这个

"plugins": [["transform-object-rest-spread", { "useBuiltIns": true }]]

【讨论】:

    【解决方案2】:

    感谢@Niraj Patel,工作但我没有.bablerc 文件。所以我手动创建了它。

    对于那些在项目的根文件夹中没有.bablerc 文件的人。手动创建。

    (base) paulsteven@smackcoders:~/root_of_project/$ vim .babelrc
    

    按照上面建议的答案添加内容,

    {
        "plugins": [
            ["transform-object-rest-spread", {
                "useBuiltIns": true
            }]
        ]
    }
    

    保存并完成....

    【讨论】:

    • 很高兴它对您有所帮助。不客气。快乐编码。
    【解决方案3】:

    我知道最初的问题是在 Node 中设置 rest 运算符,但对于那些不想配置 Babel 的人,他们可能会使用 Node 中默认可用的等效运算符:

    const foo = { x: 'v1', y: 'v2' };
    const bar = { z: 'v3' };
    

    我们想使用扩展运算符来合并两个对象,例如:

    const merged = { ...foo, ...bar };
    

    但我们的工具包中没有 rest 运算符,所以我们使用 ... 在幕后实际执行的操作:

    const merged = Object.assign({}, foo, bar);
    

    值得一提的是,...Object.assign() 都不会导致所谓的深拷贝,这意味着如果您想以不可变的方式编写代码,您应该始终嵌套这些运算符或使用导致深拷贝的东西像这样复制:

    const merged = JSON.parse(JSON.stringify(Object.assign({}, foo, bar)));
    

    这样,如果您的原始对象(在这种情况下为foobar)具有任何非原始值,您可以确保不会改变任何您不想改变的东西。

    请原谅我说得这么详细,但我认为这可能有助于阅读这个问题并刚接触 JS/TS 生态系统的人。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-29
      • 2019-01-06
      • 1970-01-01
      • 2021-03-21
      • 2020-12-18
      • 2020-03-20
      • 2023-02-03
      • 1970-01-01
      相关资源
      最近更新 更多