【问题标题】:Filter Object By Keys按键过滤对象
【发布时间】:2018-04-03 08:55:52
【问题描述】:

我正在学习高阶函数并且经常遇到麻烦,这是非常基本的,也许我没有正确理解参数..有什么原因导致这个解决方案不起作用?

// Sample Input:
// [
//   { id: 42, name: 'Clojure' },
//   { id: 43, name: 'Haskell' },
//   { id: 44, name: 'Erlang' }
// ], 42

// Expected Output:
// { id: 42, name: 'Clojure' }

function findById (languages, id) {
  return languages.filter(function(element) {
    return element.id === id;
  });
};

【问题讨论】:

  • 如果你最后有], 42,它会将输入分配给42
  • filter 返回一个包含所有匹配元素的数组,如果没有匹配则返回一个空数组。如果您只想返回第一个匹配的对象,则使用find(返回第一个匹配的对象或null,如果没有匹配项)。
  • @Slai 我认为注释位是用于调用函数findById 的参数:数组将是languages 参数,42 将是id 参数。
  • 我认为在某些情况下,ID 的类型是不同的,所以有时 "42" === 42 等于 false。在这种情况下,我建议您在进行比较之前将所有内容解析为整数。如果你是 js 初学者,请阅读更多关于 === 的信息:)!

标签: javascript function object filter


【解决方案1】:

好吧,filter 返回一个数组。这意味着,您至少需要返回它的第一项。

在这种情况下,更好的方法是使用find

const input = [{
    id: 42,
    name: 'Clojure'
  },
  {
    id: 43,
    name: 'Haskell'
  },
  {
    id: 44,
    name: 'Erlang'
  }
];

function findById(languages, id) {
  return languages.find(function(element) {
    return element.id === id;
  });
};

console.log(findById(input, 42));

【讨论】:

    【解决方案2】:

    有效,只需要访问结果的第 0 个索引

    演示

    var input = [
       { id: 42, name: 'Clojure' },
        { id: 43, name: 'Haskell' },
        { id: 44, name: 'Erlang' }
     ];
    
    function findById (languages, id) {
      return languages.filter(function(element) {
        return element.id === id;
      });
    };
    
    console.log(findById(input,42)[0]);

    【讨论】:

      猜你喜欢
      • 2019-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      • 2016-05-24
      • 2021-05-04
      相关资源
      最近更新 更多