尝试创建一个函数,该函数使用筛选器,但不使用for函数,也不使用同时循环函数或Foreach函数,该函数将循环遍历对象数组,仅返回其属性值。例如,
function getShortMessages(messages) {
return messages.filter(function(obj){
return obj.message
});
}
所以如果我打电话
getShortMessages([{message:"bleh"},{message:"blah"}]);
我应该得到一个数组的返回=[“bleh”,“blah”]我只是不确定如何在这些指导原则下实现过滤器。我也在考虑使用链函数。地图
////下面是整个代码挑战规范/////
基础:筛选练习4/18
使用数组#过滤器编写一个名为getShartMessages的函数。
getShartMessages获取一个具有“。消息”属性的对象数组,并返回一个小于
函数应该返回一个包含消息本身的数组,而不返回其包含对象。
{
message: 'Esse id amet quis eu esse aute officia ipsum.' // random
}
[ 'Tempor quis esse consequat sunt ea eiusmod.',
'Id culpa ad proident ad nulla laborum incididunt.',
'Ullamco in ea et ad anim anim ullamco est.',
'Est ut irure irure nisi.' ]
function getShortMessages(messages) {
// SOLUTION GOES HERE
}
module.exports = getShortMessages
"要再次打印这些指令,运行:函数式-javascript打印"要在测试环境中执行程序,运行:函数式-javascript运行program.js"要验证程序,运行:函数式-javascript验证program.js"对于帮助运行:函数式-JavaScript帮助
具有自定义返回值(简单的ES6示例);
js prettyprint-override">const customReturnFiltere = (result) => {
return products.filter((obj) => {
return obj.stock !== 0;
})
.map((finalResult) => {
return {
...finalResult,
info: 'product will be filtered if stock is 0'
}
});
}
虽然我意识到这条线索非常古老,但我觉得有必要在有人再次无意中发现它时发表评论。我会像上面那样使用es6语法,如下所示:
objects.filter(obj => obj.key === 'value').map(filteredObj => filteredObj.key);
因此,上面的例子是:
getShortMessages = (messages) => messages.filter(obj => obj.message.length <= 50).map(obj => obj.message);
当您想要获取与预期属性相匹配的整个对象时,请使用. filter
。使用. map
当您有一个数组的东西,并希望对这些东西做一些操作并得到结果。
挑战在于获取所有长度不超过50个字符的消息。因此,您可以使用filter
仅获取通过该测试的消息,然后使用map
仅获取消息文本。
function getShortMessages(messages) {
return messages
.filter(function(obj) {
return obj.message.length <= 50;
})
.map(function(obj) {
return obj.message;
});
}
JSFiddle:http://jsfiddle.net/rbbk65sq/
如果输入对象可能没有消息
属性,则需要使用进行测试obj.message
function getShortMessages(messages) {
return messages
.filter(function(obj) {
return obj.message && obj.message.length <= 50;
})
.map(function(obj) {
return obj.message;
});
}
ES6中的相同代码示例:
const getShortMessages = (messages) => messages
.filter(obj => obj.message.length <= 50)
.map(obj => obj.message);
如果输入对象可能没有
消息
属性:
const getShortMessages = (messages) => messages
.filter(obj => obj.message && obj.message.length <= 50)
.map(obj => obj.message);
JSFiddle:http://jsfiddle.net/npfsrwjq/
我不明白为什么当我尝试循环对象的数组属性时,过滤器返回一个空数组。 不过,当我试着做控制台的时候。日志(this.users)在getFilteredUsers方法中,我可以在它的原型中看到filter方法。。。
我试图在一个对象数组上调用过滤器方法,但我不想返回整个对象。我只想返回对象的一部分。 这个过滤函数返回 但应该正在返回 使用的问题是,我不希望未定义的被注入到数组中
问题内容: 我想在 angularjs 1.2中 使用unsafe-html 。没有html的过滤器可以工作,而html则不能。我做的事: 我在我的html头中添加了angular-sanitize: 我的角度模块: 我的HTML: 编辑:更新为 问题答案: 已在Angular 1.2中删除。由于您正确地清理了输入内容,因此应该使用。 示例:http://plnkr.co/edit/0bHeXra
问题内容: 我有一个带有一系列对象属性的对象,这些对象属性具有以下相似的结构(这是从服务返回数据的方式): 当我执行ng-repeat时,我可以遍历所有这5个对象,例如: 但是, 我真正想要做的是仅对那些不是“ foo”类型的项进行迭代 ,即3次迭代而不是5次。我知道可以以某种方式利用过滤器来执行此操作,但是我不确定如何执行。我尝试了以下方法: 但这不起作用。实际上,即使执行以下操作以将对象限制为
name String extensions String[]
问题内容: 我有一个由对象填充的ArrayList。 我的对象类称为有两个字段; 我想使用该字段过滤列表,为了进行测试,我使用了字符串“ test”。 我用了来自谷歌的番石榴,它可以过滤ArrayList。 这是我尝试的代码: 但是此代码不起作用。 问题答案: 这是正常的:Predicates.containsPattern()在s上操作,您的对象未实现。 您需要编写自己的谓词: 然后使用: 但是