我只需要将包含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"
}
]
答案 0 :(得分:6)
两个问题:
箭头函数的缩写形式必须在=>
的右侧只有表达式。你有一个if
声明。 (在括号中,即使在箭头函数之外也不会在任何地方有效。)
map
始终使用返回值。您没有给“其他”案件提供任何返回值。
在这种特定情况下,您可以使用条件运算符;我将使用null
作为“else”案例的返回值:
this.ibanList = this.data.map(
(value, index)=> (value && value.iban ? {'id': index, 'text': value.iban} : null));
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);
但请注意,结果将包含null
个。如果您仅想要value && value.iban
为真的那些,请在映射前使用filter
:
this.ibanList = this.data
.filter(value => value && value.iban)
.map((value, index) => ({'id': index, 'text': value.iban}));
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);
在这种情况下,我在映射之前使用了filter
,这意味着您用作index
的{{1}}值可能会有所不同从原来的。如果你想要原始值,预过滤,你可以通过结合上述两种方法进行过滤:
id
this.ibanList = this.data
.map((value, index)=> (value && value.iban ? {'id': index, 'text': value.iban} : null))
.filter(value => value); // Removes the nulls
您真的是否意味着用索引替换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);
值(id
等)?如果没有,请将上面的"2c4cc5e8-d24d-11e4-8833-150bbf360367"
替换为id: index
。
答案 1 :(得分:3)
尝试:
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);
答案 2 :(得分:1)
对于map
,您需要始终返回一个值,因此要获得所需的结果,您需要先filter
列表。
this.ibanList = this.data.filter(value => value && value.iban)
.map((value, index) => ({id: index, text: value.iban}));
答案 3 :(得分:0)
无需地图过滤器组合。这可以通过O(n)时间的单个减少来完成。
var data = [{"id": "2c4cc5e8-d24d-11e4-8833-150bbf360367"},{"iban": "DE45765459080","id": "2c4cc8ae-d24d-11e4-8833-150bbf360367"},{"iban": "DE3700333333","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)
答案 4 :(得分:-1)
使用过滤器代替地图。
this.ibanList = this.data.filter((value, index) => {return value && value.iban});