当前位置: 首页 > 知识库问答 >
问题:

使用过滤器返回对象中的特性值

安高义
2023-03-14

尝试创建一个函数,该函数使用筛选器,但不使用for函数,也不使用同时循环函数或Foreach函数,该函数将循环遍历对象数组,仅返回其属性值。例如,

function getShortMessages(messages) {
    return messages.filter(function(obj){
        return obj.message
    });
}

所以如果我打电话

getShortMessages([{message:"bleh"},{message:"blah"}]); 

我应该得到一个数组的返回=[“bleh”,“blah”]我只是不确定如何在这些指导原则下实现过滤器。我也在考虑使用链函数。地图

////下面是整个代码挑战规范/////

基础:筛选练习4/18

使用数组#过滤器编写一个名为getShartMessages的函数。

getShartMessages获取一个具有“。消息”属性的对象数组,并返回一个小于

函数应该返回一个包含消息本身的数组,而不返回其包含对象。

  • 消息:由10到100个随机对象组成的数组,如下所示:
{
    message: 'Esse id amet quis eu esse aute officia ipsum.' // random
}
  • 不要使用任何for/while循环或数组#forEach
  • 尝试链接一些数组方法!
[ '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.' ]
  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
function getShortMessages(messages) {
  // SOLUTION GOES HERE
}

module.exports = getShortMessages

"要再次打印这些指令,运行:函数式-javascript打印"要在测试环境中执行程序,运行:函数式-javascript运行program.js"要验证程序,运行:函数式-javascript验证program.js"对于帮助运行:函数式-JavaScript帮助

共有3个答案

施俊远
2023-03-14

具有自定义返回值(简单的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'
        }
    });
}
岳宣
2023-03-14

虽然我意识到这条线索非常古老,但我觉得有必要在有人再次无意中发现它时发表评论。我会像上面那样使用es6语法,如下所示:

objects.filter(obj => obj.key === 'value').map(filteredObj => filteredObj.key);

因此,上面的例子是:

getShortMessages = (messages) => messages.filter(obj => obj.message.length <= 50).map(obj => obj.message);
邬宏扬
2023-03-14

当您想要获取与预期属性相匹配的整个对象时,请使用. 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上操作,您的对象未实现。 您需要编写自己的谓词: 然后使用: 但是