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

2024-01-08

尝试创建一个使用 filter 但不使用 for 或 while 循环或 foreach 函数的函数,该函数将循环遍历对象数组,仅返回其属性值。例如,

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

所以如果我打电话

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

我应该得到一个数组的返回 = ["bleh","blah"] 我只是不确定如何根据这些准则实施过滤器。我也在考虑使用链函数,也许是.map。

//// 这是完整的代码挑战规范/////

基本:过滤器 练习 4(共 18 个)

Task

使用 Array#filter 编写一个名为 getShortMessages 的函数。

getShortMessages 接受具有“.message”属性的对象数组,并返回长度小于 50 个字符的消息数组。

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

论据

  • messages:由 10 到 100 个随机对象组成的数组,如下所示:
{
    message: 'Esse id amet quis eu esse aute officia ipsum.' // random
}

状况

  • 不要使用任何 for/while 循环或 Array#forEach。
  • 不要创建任何不必要的功能,例如帮手。

Hint

  • 尝试链接一些数组方法!

Example

[ '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 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

样板文件

function getShortMessages(messages) {
  // SOLUTION GOES HERE
}

module.exports = getShortMessages

» 要再次打印这些说明,请运行:function-javascript print » 要在测试环境中执行您的程序,请运行:function-javascript run program.js » 要验证您的程序,请运行:function-javascript verify program.js » 如需帮助,请运行:function-javascript help


Use .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/ http://jsfiddle.net/rbbk65sq/

如果输入对象可能没有message财产,你想测试它obj.message && obj.message.length <= 50像这样:

function getShortMessages(messages) {
  return messages
    .filter(function(obj) {
      return obj.message && obj.message.length <= 50;
    })
    .map(function(obj) {
      return obj.message;
    });
}

ES6

ES6 中的相同代码示例:

const getShortMessages = (messages) => messages
  .filter(obj => obj.message.length <= 50)
  .map(obj => obj.message);

如果输入对象可能没有message财产:

const getShortMessages = (messages) => messages
  .filter(obj => obj.message && obj.message.length <= 50)
  .map(obj => obj.message);

JSFiddle:http://jsfiddle.net/npfsrwjq/ http://jsfiddle.net/npfsrwjq/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用过滤器返回对象中的属性值 的相关文章