【问题标题】:Alternate for arrow function in Javascript for ForEachForEach 的 Javascript 中箭头函数的替代
【发布时间】:2022-01-12 19:59:56
【问题描述】:

我有如下代码

function renameKey ( obj, oldKey, newKey ) {
  obj[newKey] = obj[oldKey];
  delete obj[oldKey];
}
const arr = JSON.parse(json);
arr.forEach( obj => renameKey( obj, '_id', 'id' ) );
const updatedJson = JSON.stringify( arr );

但似乎箭头函数 (=>) 在我的环境中不起作用并出现错误。

箭头函数语法 (=>)' 仅在 ES6 中可用(使用 'esversion: 6')

这是 Apigee 环境,我无权更改任何配置。当我删除箭头函数并像下面这样作为普通函数调用时,它失败了

const arr = JSON.parse(json);
arr.forEach(renameKey( obj, '_id', 'id' ) );
const updatedJson = JSON.stringify( arr );

所以,为了更改 JSON 中的每个键,我该如何使用 forEach 循环,或者如果有替代方法会很有帮助。谁能给点建议。

【问题讨论】:

  • 改用传统函数。
  • arr.forEach(function (obj) { renameKey(obj, '_id', 'id') });
  • 这能回答你的问题吗? Why doesn't this arrow function work in IE 11?
  • 谢谢尼古拉斯。你的代码就像一个魅力。
  • @NicholasTower,此代码有效,但出现了一个令人惊讶的问题。它正在修改消息的顺序。假设如果我们在数组中有三个 JSON 元素,重命名对象后,第一个元素变为最后一个元素,其他元素也发生位置变化。有什么办法可以避免吗?

标签: javascript arrays json arrow-functions


【解决方案1】:

如果你喜欢用这个闭包

arr.forEach(renameKey('_id', 'id'))

模式,您可以对旧键名和新键名进行闭包,并返回一个接受对象进行重命名的函数。

function renameKey (oldKey, newKey) {
    return function (obj) {
        obj[newKey] = obj[oldKey];
        delete obj[oldKey];
    };
}

【讨论】:

  • 错字? “关闭已移交的新旧密钥名称”
  • @danh,怎么了?
  • 谢谢@DM。我看到“移交”意味着“传递参数”。也许是“对新旧关键参数的封闭”?
  • 尼古拉斯也编写了类似的代码。谢谢大家的回答。一切正常,我可以继续前进。
  • @SridharAdurthi,不,因为在第一步中缺少obj 以及返回函数的参数。 nicolas 的方法是使用带有三个参数的原始函数。
【解决方案2】:
const arr = JSON.parse(json);
arr.forEach(function(obj){ renameKey( obj, '_id', 'id' ) });
const updatedJson = JSON.stringify( arr );

【讨论】:

    猜你喜欢
    • 2020-11-13
    • 2020-11-08
    • 2017-04-18
    • 1970-01-01
    • 2021-07-06
    • 2019-06-16
    • 2020-11-30
    • 2018-01-09
    • 2023-02-22
    相关资源
    最近更新 更多