lodash,获取匹配元素的索引?

1 javascript lodash

这是我的情况

var myArray = [undefined, true, false, true];
Run Code Online (Sandbox Code Playgroud)

我想获取项目的索引,该值是真的。有了上面的数组,结果应该是

[1, 3]
Run Code Online (Sandbox Code Playgroud)

因为第 2 项和第 4 项等于 true。如何使用 lodash 找到匹配项目的索引?

谢谢

nnn*_*nnn 5

以下是使用 vanilla JS 时想到的第一种方法:

var myArray = [undefined, true, false, true];

var result = myArray.map((v,i) => v ? i : -1).filter(v => v > -1);

console.log(result);
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想使用箭头函数:

var result = myArray.map(function(v,i) { return v ? i : -1; })
                    .filter(function(v) { return v > -1; });
Run Code Online (Sandbox Code Playgroud)

也就是说,首先映射原始数组以输出真实元素的索引,并为其他元素输出 -1,然后过滤该结果以仅保留非 -1 的元素。

请注意, map 函数(v,i) => v ? i : -1正在测试真实元素 - 如果您只需要布尔值元素,true则使用(v,i) => v===true ? i : -1.

我想 Lodash 的等价物如下(编辑:感谢 zerkms 大大改进了语法):

var result = myArray.map(function(v,i) { return v ? i : -1; })
                    .filter(function(v) { return v > -1; });
Run Code Online (Sandbox Code Playgroud)
var myArray = [undefined, true, false, true];

var result = _(myArray).map((v,i) => v ? i : -1).filter(v => v > -1).value();

console.log(result);
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句`_(myArray).map(...).filter(...).value()` (2认同)