Javascript 使用ES6语法添加条件签入.map()时出错
我只需要将包含iban值的对象分配给下面代码中的列表。我无法解决此问题。请帮忙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
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
是一种有效的方法