这是我的案例
var myArray = [undefined, true, false, true];
我想获取项目的索引,该值为true。使用上面的数组,结果应该是
[1, 3]
因为第2和第4项等于真。 如何使用lodash找到匹配项目的索引?
由于
答案 0 :(得分:3)
以下是使用vanilla JS时想到的第一种方式:
var myArray = [undefined, true, false, true];
var result = myArray.map((v,i) => v ? i : -1).filter(v => v > -1);
console.log(result);

或者如果您不想使用箭头功能:
var result = myArray.map(function(v,i) { return v ? i : -1; })
.filter(function(v) { return v > -1; });
也就是说,首先映射原始数组以输出真实元素的索引,并为其他元素输出-1,然后将该结果过滤为仅保留那些不是-1的结果。
请注意,地图函数(v,i) => v ? i : -1
正在测试真实元素 - 如果您只需要布尔值为true
的元素,则使用(v,i) => v===true ? i : -1
。
我猜Lodash相当于以下内容(编辑:感谢zerkms提供了大大改进的语法):
var myArray = [undefined, true, false, true];
var result = _(myArray).map((v,i) => v ? i : -1).filter(v => v > -1).value();
console.log(result);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.14.0/lodash.js"></script>
&#13;
答案 1 :(得分:2)
另一种可能性:
// lodash
x = _(myArray).map(Array).filter(0).map(1).value()
// vanilla
x = myArray.map(Array).filter(a => a[0]).map(a => a[1])
答案 2 :(得分:1)
// lodash
var myArray = [undefined, true, false, true];
var indexes = _.reduce(myArray, (result, val, index) => {
if (val) {
result.push(index);
}
return result;
}, []);