尝试学习一些功能性的javascript和es6概念。
我有一个数组
var _ = require('underscore');
var raw =[
{
key :"name",value:"henry"
},
{
key :"age",value:"old"
},
{
key :"food",value:"matooke"
},
{
key :"kids",value:"Acacia"
},
{
key :"garbageA",value:"kasailoA"
},
{
key :"garbageB",value:"kasasiroB"
},
]
我正在尝试使用垃圾密钥过滤掉数据。我有两个代码返回不同的结果,我想知道为什么他们不会返回相同的结果。 我写的时候
const endShape = _(raw)
.filter(key =>!/garbage/.test(key));
console.log(endShape);
在我的控制台中打印。
[ { key: 'name', value: 'henry' },
{ key: 'age', value: 'old' },
{ key: 'food', value: 'matooke' },
{ key: 'kids', value: 'Acacia' },
{ key: 'garbageA', value: 'kasailoA' },
{ key: 'garbageB', value: 'kasasiroB' } ]
显示我的过滤器dint有效。
我写的时候
const endShape = _(raw)
.filter({key} =>!/garbage/.test(key));
console.log(endShape);
它带来语法错误。
但是当我写作
const endShape = _(raw)
.filter(({key}) =>!/garbage/.test(key));
console.log(endShape);
我的过滤器运行良好并打印
[ { key: 'name', value: 'henry' },
{ key: 'age', value: 'old' },
{ key: 'food', value: 'matooke' },
{ key: 'kids', value: 'Acacia' } ]
为什么会这样?但我从phat arrow语法知道可以写
var x = y=>y+1;
以及
var x =(y)=>y+1
答案 0 :(得分:4)
实际上,过滤器的第一个和第二个键是完全不同的。
在你第一次运行时:
const endShape = _(raw)
.filter(key =>!/garbage/.test(key));
您正在从raw
数组传递一个对象,并且您的支票正在评估如下:
!/garbage/.test({ key: 'name', value: 'henry' })
总是被评估为false,然后你否定它,所以每个条件都是真的,因此你的过滤器让每个条目都通过。
在第二轮你做:
const endShape = _(raw)
.filter(({key}) =>!/garbage/.test(key));
您从对象destructuring key
开始,因此测试有意义,并且您的过滤器工作正常!
希望它有所帮助!