Javascript 将箭头样式的函数转换为";功能“;风格

Javascript 将箭头样式的函数转换为";功能“;风格,javascript,angularjs,ecmascript-6,lodash,arrow-functions,Javascript,Angularjs,Ecmascript 6,Lodash,Arrow Functions,我有这样一个函数: const jsonObject = {a: {b: 'c'}}; const x = 'a.b'; const properties = x.split('.'); const item = properties.reduce((obj, prop) => obj && obj[prop], jsonObject); console.log(item); // prints 'c; const item = properties.reduce(f

我有这样一个函数:

const jsonObject = {a: {b: 'c'}};
const x = 'a.b';
const properties = x.split('.');

const item = properties.reduce((obj, prop) => obj && obj[prop], jsonObject);

console.log(item); // prints 'c;
const item = properties.reduce(function(obj, prop){
   if(obj && obj[prop]) return obj[prop];
});
此函数动态遍历jsonObject并打印值

这很好,但是这种声明风格不支持我的环境。因此,我想尝试将其转换为函数样式声明,如下所示:

const jsonObject = {a: {b: 'c'}};
const x = 'a.b';
const properties = x.split('.');

const item = properties.reduce((obj, prop) => obj && obj[prop], jsonObject);

console.log(item); // prints 'c;
const item = properties.reduce(function(obj, prop){
   if(obj && obj[prop]) return obj[prop];
});
但这似乎不起作用。其打印(项目)未定义

const item = properties.reduce((obj, prop) => obj && obj[prop], jsonObject);
类似于

const item = properties.reduce(function(obj, prop){
   return obj && obj[prop];
}, jsonObject);

阅读有关.reduce及其参数的更多信息

是的,正确的翻译是:

function(obj, prop) {
    return obj && obj[prop];
}
在代码中:

const item = properties.reduce(function(obj, prop){
  if(obj && obj[prop]) return obj[prop];
});
您永远不会将jsonObject作为第二个参数传递给函数,因此
.reduce
不知道枚举什么。正确的做法是:

const item = properties.reduce(function(obj, prop){
  if(obj && obj[prop]) return obj[prop];
}, jsonObject);
工作片段

const jsonObject={
a:{
b:‘c’
}
};
常数x='a.b';
常量属性=x.split('.');
const item=properties.reduce(函数(obj,prop){
返回对象和对象[prop];
},jsonObject);
console.log(项目);//打印'c一个很棒的在线工具

它可以帮助您轻松地将ES6转换为ES5。不过,我建议您了解它是如何进行转换的

   'use strict';

    var jsonObject = { a: { b: 'c' } };
    var x = 'a.b';
    var properties = x.split('.');

    var item = properties.reduce(function (obj, prop) {
      return obj && obj[prop];
    }, jsonObject);

    console.log(item);

可以添加默认值以防止对象中出现未给定的属性

const item = properties.reduce(function (obj, prop){
        return (obj || {})[prop];
    }, jsonObject);

只需返回表达式,您不需要使用
if
语句。谢谢大家。。我随机选择一个答案,并对所有正确答案进行投票。再次非常感谢。“胖箭头(=>)默认返回写在右侧的任何内容”这不太正确。如果arrow函数有一个“block body”,那么它只在body包含
return
语句时返回一些内容。“移植到匿名函数时…”函数是否匿名无关紧要。@FelixKling我知道,这就是我默认说的原因,默认的胖箭头表达式没有块体。@FelixKling你说得对,实际上,函数是否是匿名的并不重要。在这种情况下,使用术语“default”是没有意义的。您可以在使用表达式或块之间进行选择,类似于它在
if
语句中的工作方式。但是没有“默认”行为,你必须选择一个或另一个,你不能不选择任何一个。也许你的意思是“最常见”的用例是使用表达式。不管怎么说,直言不讳(就像你现在这样)总是更好的。不是每个人都会理解你对“默认行为”的定义。@FelixKling你的推理是有道理的,谢谢你的洞察力。我会记住那些指针。