es6相当于下划线findWhere

时间:2016-05-18 13:56:39

标签: javascript underscore.js ecmascript-6

我希望了解如何使用下划线_.findWhere并将其转换为es6原生javascript?

_.findWhere($scope.template, {id: $scope.approveTemplate})

2 个答案:

答案 0 :(得分:12)

malloc

答案 1 :(得分:5)

虽然Lim's answer对于您发布的具体示例非常有用,但这个应该处理_.findWhere的每个用例:

function myFindWhere(array, criteria) {
    return array.find(item => Object.keys(criteria).every(key => item[key] === criteria[key]))
}

它返回输入数组中的第一个项目,其中所有已定义的条件属性都匹配(如果没有这样的项目,则返回undefined),我认为这是_.findWhere的合同。

以下是如何使用它来处理您的示例:

myFindWhere($scope.template, {id: $scope.approveTemplate})

以下是我用来测试它的一些测试用例:

  

myFindWhere([{" a":0," b":1},{" a":1},{" b&# 34;:1}],{" a":0})
  >对象{a:0,b:1}
  myFindWhere([{" a":0," b":1},{" a":1},{" b": 1}],{" b":0})
  >未定义
  myFindWhere([{" a":0," b":1},{" a":1},{" b": 1}],{" b":1})
  >对象{a:0,b:1}
  myFindWhere([{" a":0," b":1},{" a":1},{" b": 2}],{" b":2})
  >对象{b:2}