繁体   English   中英

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

[英]lodash, get matched element's index?

这是我的情况

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

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

[1, 3]

因为第二项和第四项相等。 如何使用lodash查找匹配项的索引?

谢谢

以下是使用香草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; });

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

注意,映射函数(v,i) => v ? i : -1 (v,i) => v ? i : -1正在测试真实元素-如果仅需要布尔true元素,则使用(v,i) => v===true ? i : -1 (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> 

另一种可能性:

// lodash 

x = _(myArray).map(Array).filter(0).map(1).value()

// vanilla

x = myArray.map(Array).filter(a => a[0]).map(a => a[1])
// lodash
var myArray = [undefined, true, false, true];
var indexes = _.reduce(myArray, (result, val, index) => {
    if (val) {
        result.push(index);
    }
    return result;
}, []);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM