Javascript 数组映射和过滤器顺序
我有一个对象数组:Javascript 数组映射和过滤器顺序,javascript,arrays,Javascript,Arrays,我有一个对象数组: [{'message':'test...'},{'message':'50 chars...'}] 我使用数组映射和过滤器返回消息少于50个字符的所有对象 然而,我提出了以下两种解决方案,它们都产生相同的结果,它们在效率方面是否相同?还是一个比另一个更受欢迎 function getShortMessages(messages){ return messages.map(function(item){ return item.message; }).filt
[{'message':'test...'},{'message':'50 chars...'}]
我使用数组映射和过滤器返回消息少于50个字符的所有对象
然而,我提出了以下两种解决方案,它们都产生相同的结果,它们在效率方面是否相同?还是一个比另一个更受欢迎
function getShortMessages(messages){
return messages.map(function(item){
return item.message;
}).filter(function(message){
return message.length < 50;
})
}
函数getShortMessages(消息){
返回消息.map(函数(项){
返回item.message;
}).过滤器(功能(消息){
返回消息长度<50;
})
}
在本文中,我使用map将消息获取到一个数组中,然后过滤消息数组(字符串)
函数getShortMessages(消息){
返回消息。筛选器(函数(项){
return item.message.length<50
}).map(功能(项目){
返回item.message
})
}
在这个例子中,我得到一个对象数组,其中消息少于50个字符,然后我将消息放入一个数组中
实现上述方法(最佳实践)的正确方法是什么?我会使用reduce()
。如果我需要过滤和映射数据,基本上我会使用它
另外,从函数中删除所有幻数。:)
var shortMessages=getShortMessages(messages,50);
函数getShortMessages(消息,长度){
返回消息.reduce(函数(结果,项){
如果(item.message.length
就个人而言,您可以使用充当过滤器的谓词函数创建一个reducer
//检索长度不超过70个字符的随机消息。
$.getJSON('http://www.json-generator.com/api/json/get/bLTLHYsXDm?indent=2',
功能(信息){
$.each(getShortMessages(messages,70),函数(index,message){
$(“”).text(message).appendTo('body');
});
});
//定义消息长度谓词和映射回调。
函数getShortMessages(消息,限制){
返回mapReducer(消息,函数(){
返回此.message.length
如果您先筛选
,则最后将映射
到一个最多为原始数组长度的数组上。因此,如果您正在寻找微优化,您应该首先筛选
,然后映射
但是,在实践中,两者都可以(只有当原始列表很长并且
map
转换非常昂贵时,这才会成为一个问题。在这种情况下,遵循的答案并使用不同的方法(即使用reduce
)可能是明智的.你能使用第三部分库吗?如果可以,你可以看到underline.js,我喜欢messages.map(函数(x){return x.y.length<50&&x.y;})。filter(Boolean)
:最小迭代,最小手工代码。reduce的一个缺点是它的可组合性较差(无法独立调整criteria和pull)并且不使用纯函数回调。。。
function getShortMessages(messages) {
return messages.filter(function(item) {
return item.message.length < 50
}).map(function(item) {
return item.message
})
}