Javascript 使用ES6语法添加条件签入.map()时出错

Javascript 使用ES6语法添加条件签入.map()时出错,javascript,angularjs,callback,ecmascript-6,Javascript,Angularjs,Callback,Ecmascript 6,我只需要将包含iban值的对象分配给下面代码中的列表。我无法解决此问题。请帮忙 this.ibanList = this.data.map( (value, index)=> (if(value && value.iban){'id': index, 'text': value.iban})); 数据中的值如下所示 "data": [ { "id": "2c4cc5e8-d24d-11e4-8833-150b

我只需要将包含iban值的对象分配给下面代码中的列表。我无法解决此问题。请帮忙

  this.ibanList = this.data.map(
        (value, index)=> (if(value && value.iban){'id': index, 'text': value.iban}));
数据中的值如下所示

 "data": [
        {

            "id": "2c4cc5e8-d24d-11e4-8833-150bbf360367"
        },
        {
            "iban": "DE45765459080",
            "id": "2c4cc8ae-d24d-11e4-8833-150bbf360367"
        },
        {

            "iban": "DE3700333333",
            "id": "8a23995d-10d7-11e5-b819-2c44fd83fb24"
        }
    ]

对于
map
您需要始终返回一个值,因此要获得所需的结果,您需要先对列表进行
过滤

this.ibanList = this.data.filter(value => value && value.iban)
     .map((value, index) => ({id: index, text: value.iban}));

对于
map
您需要始终返回一个值,因此要获得所需的结果,您需要先对列表进行
过滤

this.ibanList = this.data.filter(value => value && value.iban)
     .map((value, index) => ({id: index, text: value.iban}));
两个问题:

  • 箭头函数的简写形式只能在
    =>
    的右侧有一个表达式。您有一个
    if
    语句。(在括号中,这在任何地方都无效,即使在arrow函数之外也是如此。)

  • map
    始终使用返回值。您没有为“else”案例提供任何返回值

  • 在这种特定情况下,可以使用条件运算符;我将使用
    null
    作为“else”案例的返回值:

    var数据=[
    {“id”:“2c4cc5e8-d24d-11e4-8833-150bbf360367”},
    {“iban”:“DE45765459080”,“id”:“2C4C8AE-d24d-11e4-8833-150bbf360367”},
    {“iban”:“DE3700333333”,“id”:“8a23995d-10d7-11e5-b819-2c44fd83fb24”}
    ];
    var ibanList=data.map(
    (value,index)=>(value&&value.iban?{'id':index,'text':value.iban}:null));
    console.log(ibanList)两个问题:

  • 箭头函数的简写形式只能在
    =>
    的右侧有一个表达式。您有一个
    if
    语句。(在括号中,这在任何地方都无效,即使在arrow函数之外也是如此。)

  • map
    始终使用返回值。您没有为“else”案例提供任何返回值

  • 在这种特定情况下,可以使用条件运算符;我将使用
    null
    作为“else”案例的返回值:

    var数据=[
    {“id”:“2c4cc5e8-d24d-11e4-8833-150bbf360367”},
    {“iban”:“DE45765459080”,“id”:“2C4C8AE-d24d-11e4-8833-150bbf360367”},
    {“iban”:“DE3700333333”,“id”:“8a23995d-10d7-11e5-b819-2c44fd83fb24”}
    ];
    var ibanList=data.map(
    (value,index)=>(value&&value.iban?{'id':index,'text':value.iban}:null));
    
    console.log(ibanList)使用过滤器而不是映射

    this.ibanList = this.data.filter((value, index) => {return value && value.iban});
    

    使用过滤器而不是映射

    this.ibanList = this.data.filter((value, index) => {return value && value.iban});
    
    尝试:

    
    var data=[{id:1,text:“1”,iban:'foo'},{id:2,text:“2”,iban:'bar'},{id:10,text:20}];
    var ibanList=data.filter((value)=>value&&value.iban.map(
    (value,index)=>({'id':index,'text':value.iban});
    console.log(ibanList)尝试:

    
    var data=[{id:1,text:“1”,iban:'foo'},{id:2,text:“2”,iban:'bar'},{id:10,text:20}];
    var ibanList=data.filter((value)=>value&&value.iban.map(
    (value,index)=>({'id':index,'text':value.iban});
    
    console.log(ibanList)不需要地图过滤器组合。这可以通过O(n)时间内的单个减少来完成

    var数据=[{“id”:“2c4cc5e8-d24d-11e4-8833-150bbf360367”},{“iban”:“DE45765459080”,“id”:“2c4cc8ae-d24d-11e4-8833-150bbf360367”},{“iban”:“de37033333”,“id”:“8a23995d-10d7-11e5-b819-2c44fd83fb24”},
    ibanList=data.reduce((p,c,i)=>(c.iban和p.push({“id”:i,“text”:c.iban}),p),[]);
    
    console.log(ibanList)
    不需要映射过滤器组合。这可以通过O(n)时间内的单个减少来完成

    var数据=[{“id”:“2c4cc5e8-d24d-11e4-8833-150bbf360367”},{“iban”:“DE45765459080”,“id”:“2c4cc8ae-d24d-11e4-8833-150bbf360367”},{“iban”:“de37033333”,“id”:“8a23995d-10d7-11e5-b819-2c44fd83fb24”},
    ibanList=data.reduce((p,c,i)=>(c.iban和p.push({“id”:i,“text”:c.iban}),p),[]);
    
    console.log(ibanList)
    这有点让人困惑,您是否试图过滤掉任何没有
    iban
    键的对象?是的。我只需要在回调中使用es6语法验证它。您不能使用
    map
    进行过滤,你必须返回一些东西吗?我需要将所有包含id和iban的对象返回到此.ibanList。@user1645290:“我需要将所有包含id和iban的对象返回到此.ibanList。”你的代码不是这样做的。没有
    id
    且具有
    iban
    的条目将包含在列表中,您将用索引替换
    id
    。你真的想那样做吗?那些
    id
    值看起来…很重要。这有点让人困惑,你是否试图过滤掉任何没有
    iban
    键的对象?是的。我只需要在回调中使用es6语法验证它。你不能使用
    map
    进行过滤,你必须返回一些东西吗?我需要将所有包含id和iban的对象返回到此.ibanList。@user1645290:“我需要将所有包含id和iban的对象返回到此.ibanList。”你的代码不是这样做的。没有
    id
    且具有
    iban
    的条目将包含在列表中,您将用索引替换
    id
    。你真的想那样做吗?那些
    id
    值看起来…很重要。我认为您需要将{}括在括号内,因为它将被解释为带标签的块而不是对象。您完全正确,我写这篇文章时不确定我的头在哪里!感谢您很容易混淆
    过滤器
    减少
    :-)我认为您需要将{}括在括号内,因为它将被解释为带标签的块而不是对象。您完全正确,我写这篇文章时不确定我的头在哪里!谢谢很容易混淆
    过滤器
    减少
    :-)我只是对逗号运算符吐了一点,更不用说有副作用的
    &
    。)说真的,我们不需要代码那么容易被误读/误解/难以调试。使用
    reduce
    是一种有效的方法