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

时间:2016-07-26 02:56:09

标签: javascript lodash

这是我的案例

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

我想获取项目的索引,该值为true。使用上面的数组,结果应该是

[1, 3]

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

由于

3 个答案:

答案 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;
&#13;
&#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;
}, []);