我想使用Lodash函数_.filter()
来过滤数组数组。
我只想获得分数得分等于1
的第一项。
var newScores = [{name: 'toto', scores: [{score: 10, scaled: 1}, {score: 10, scaled: 0}]}, {name: 'tata', scores: [{score: 500, scaled: 0}, {score: 19, scaled: 0}]}];
var filterScores = _.filter(newScores, function(score) { return _.filter(score.scores, {scaled: 1}); });
console.log(filterScores);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.core.min.js"></script>
我想要的结果:
[{name: 'toto', scores: [{score: 10, scaled: 1}, {score: 10, scaled: 0}]}]
答案 0 :(得分:1)
在内部_.filter中,您尝试返回列表-_.filter返回计算结果为条件的项目,因此您必须设置该条件。
尝试在内部过滤器中添加此 .length> 0;
var newScores = [{name: 'toto', scores: [{score: 10, scaled: 1}, {score: 10, scaled: 0}]}, {name: 'tata', scores: [{score: 500, scaled: 0}, {score: 19, scaled: 0}]}];
var filterScores = _.filter(newScores, function(score) {
return _.filter(score.scores, {scaled: 1}).length > 0; // evaluate to a list that is not empty
});
console.log(filterScores);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.core.min.js"></script>
答案 1 :(得分:0)
您可以在过滤器回调中使用_.some
。
var newScores = [{ name: 'toto', scores: [{ score: 10, scaled: 1 }, { score: 10, scaled: 0 }] }, { name: 'tata', scores: [{ score: 500, scaled: 0 }, { score: 19, scaled: 0 }] }],
filterScores = _.filter(newScores, ({ scores }) => _.some(scores, { scaled: 1 }));
console.log(filterScores);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.core.min.js"></script>
答案 2 :(得分:0)
您为什么需要重载?
var newScores = [{name: 'toto', scores: [{score: 10, scaled: 1}, {score: 10, scaled: 0}]}, {name: 'tata', scores: [{score: 500, scaled: 0}, {score: 19, scaled: 0}]}];
console.log(newScores.filter(val => val.scores[0].scaled === 1));
答案 3 :(得分:0)
使用lodash的正确代码应该是
var newScores = [{name: 'toto', scores: [{score: 10, scaled: 1}, {score: 10, scaled: 0}]}, {name: 'tata', scores: [{score: 500, scaled: 0}, {score: 19, scaled: 0}]}];
var filterScores = _.filter(newScores, function(score) { return score.scores[0].scaled === 1 });
console.log(filterScores);