首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >得到匹配元素的指数?

得到匹配元素的指数?
EN

Stack Overflow用户
提问于 2016-07-26 02:56:08
回答 3查看 3.4K关注 0票数 2

这是我的案子

代码语言:javascript
运行
复制
var myArray = [undefined, true, false, true];

我想得到条目的索引,哪个值是真的。对于上面的数组,结果应该是

代码语言:javascript
运行
复制
[1, 3]

第二项和第四项相等。怎样才能找到与之匹配的项目索引?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-26 03:16:33

以下是使用vanilla JS的第一种方式:

代码语言:javascript
运行
复制
var myArray = [undefined, true, false, true];

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

console.log(result);

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

代码语言:javascript
运行
复制
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改进了许多语法):

代码语言:javascript
运行
复制
var myArray = [undefined, true, false, true];

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

console.log(result);
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.14.0/lodash.js"></script>

票数 6
EN

Stack Overflow用户

发布于 2016-07-26 03:33:10

另一种可能性是:

代码语言:javascript
运行
复制
// lodash 

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

// vanilla

x = myArray.map(Array).filter(a => a[0]).map(a => a[1])
票数 2
EN

Stack Overflow用户

发布于 2016-07-26 04:10:52

代码语言:javascript
运行
复制
// lodash
var myArray = [undefined, true, false, true];
var indexes = _.reduce(myArray, (result, val, index) => {
    if (val) {
        result.push(index);
    }
    return result;
}, []);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38580330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档