使用ES6语法在.map()中添加条件检查时出错

Rap*_*ael 1 javascript callback angularjs ecmascript-6

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

  this.ibanList = this.data.map(
        (value, index)=> (if(value && value.iban){'id': index, 'text': value.iban}));
Run Code Online (Sandbox Code Playgroud)

数据中存在的值如下所示.

 "data": [
        {

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

            "iban": "DE3700333333",
            "id": "8a23995d-10d7-11e5-b819-2c44fd83fb24"
        }
    ]
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 6

两个问题:

  1. 箭头函数的简写形式必须只有一个表达式在右侧=>.你有一份if声明.(在括号中,即使在箭头函数之外也不会在任何地方有效.)

  2. map始终使用返回值.您没有给"其他"案件提供任何返回值.

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

this.ibanList = this.data.map(
    (value, index)=> (value && value.iban ? {'id': index, 'text': value.iban} : null));
Run Code Online (Sandbox Code Playgroud)

var data = [
  {"id": "2c4cc5e8-d24d-11e4-8833-150bbf360367"},
  {"iban": "DE45765459080", "id": "2c4cc8ae-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);
Run Code Online (Sandbox Code Playgroud)

但请注意,结果将包含其中null的内容.如果你想要那些value && value.iban是真的,那么filter在映射之前使用:

this.ibanList = this.data
    .filter(value => value && value.iban)
    .map((value, index) => ({'id': index, 'text': value.iban}));
Run Code Online (Sandbox Code Playgroud)

var data = [
  {"id": "2c4cc5e8-d24d-11e4-8833-150bbf360367"},
  {"iban": "DE45765459080", "id": "2c4cc8ae-d24d-11e4-8833-150bbf360367"},
  {"iban": "DE3700333333", "id": "8a23995d-10d7-11e5-b819-2c44fd83fb24"}
];
var ibanList = data
    .filter(value => value && value.iban)
    .map((value, index) => ({'id': index, 'text': value.iban}));
console.log(ibanList);
Run Code Online (Sandbox Code Playgroud)

在那种情况下,我filter 映射之前使用,这意味着index您使用的值id可能与原始值不同.如果你想要原始值,预过滤,你可以通过结合上面的两种方法进行过滤:

this.ibanList = this.data
    .map((value, index)=> (value && value.iban ? {'id': index, 'text': value.iban} : null))
    .filter(value => value); // Removes the nulls
Run Code Online (Sandbox Code Playgroud)

var data = [
  {"id": "2c4cc5e8-d24d-11e4-8833-150bbf360367"},
  {"iban": "DE45765459080", "id": "2c4cc8ae-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))
    .filter(value => value); // Removes the nulls
console.log(ibanList);
Run Code Online (Sandbox Code Playgroud)


真的想用索引替换id值("2c4cc5e8-d24d-11e4-8833-150bbf360367"等)吗?如果没有,请id: index在上面替换id: value.id.