这是我的案子
var myArray = [undefined, true, false, true];我想得到条目的索引,哪个值是真的。对于上面的数组,结果应该是
[1, 3]第二项和第四项相等。怎样才能找到与之匹配的项目索引?
谢谢
发布于 2016-07-26 03:16:33
以下是使用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>
发布于 2016-07-26 03:33:10
另一种可能性是:
// lodash
x = _(myArray).map(Array).filter(0).map(1).value()
// vanilla
x = myArray.map(Array).filter(a => a[0]).map(a => a[1])发布于 2016-07-26 04:10:52
// lodash
var myArray = [undefined, true, false, true];
var indexes = _.reduce(myArray, (result, val, index) => {
if (val) {
result.push(index);
}
return result;
}, []);https://stackoverflow.com/questions/38580330
复制相似问题