es6相当于下划线findWhere

per*_*ai1 5 javascript underscore.js ecmascript-6

我想找出如何采用下划线_.findWhere并将其转换为es6原生javascript?

_.findWhere($scope.template, {id: $scope.approveTemplate})
Run Code Online (Sandbox Code Playgroud)

Lim*_* H. 13

$scope.template.find(t => t.id === $scope.approveTemplate)
Run Code Online (Sandbox Code Playgroud)


Aar*_*ron 5

虽然Lim的回答非常适合您发布的具体示例,但这个应该处理以下每个用例_.findWhere:

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

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

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

myFindWhere($scope.template, {id: $scope.approveTemplate})
Run Code Online (Sandbox Code Playgroud)

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

myFindWhere([{"a":0,"b":1},{"a":1},{"b":1}],{"a":0})
>对象{a:0,b :1}
myFindWhere([{"a":0,"b":1},{"a":1},{"b":1}],{"b":0})
> undefined
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}