我正在尝试使用Lodash根据id的匹配过滤一系列对象,这就是我尝试过的:
var team = _.find(this.teams, { 'id': this.newSchedule.team});
_.filter(this.yards, function(yard) {
return _.find(team.yards, { id: yard.id });
});
码数据:
[ { "id": 1, "name": "Test" },{ "id": 2, "name": "Test 2" } ]
团队数据:
[ { "id": 1, "name": "Team 1", "yards": [{ "id": 1, "name" }] ]
我希望this.yards根据所选团队的码ID来显示码数。
答案 0 :(得分:0)
很难理解你的意思,院子id
是否与团队id
匹配?
如果是这样的话,你需要做的就是首先找到具有相同id
的团队,然后抓住那些团队码。因此我会使用map函数两次:
const result = this
.yards
.map(y => team.find(t => t.id === y.id)) // join with the right team
.map(t => t.yards) // reduce to that teams yards
答案 1 :(得分:0)
由于team
是一个数组,因此需要在对该数组中的单个元素执行_.find
之前对其进行迭代。调用变量team
(单数)并没有用。 teams
会更有意义。
以下是更改lodash代码的方法:
var yards = [ { id: 1, name: "Test" },{ id: 2, name: "Test 2" } ],
teams = [ { id: 1, name: "Team 1", yards: [{ id: 1, name: "Missing string" }] } ]
result = _.filter(this.yards, function(yard) {
return _.some(this.teams, function(team) {
return _.find(team.yards, { id: yard.id });
});
});
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.4/lodash.min.js"></script>
因此,这将返回与至少一个团队相关的码数。