获取满足条件的javascript数组元素的索引

获取满足条件的javascript数组元素的索引,javascript,Javascript,我有这样一个数组: [{prop1:"abc",prop2:"qwe"},{prop1:"abc",prop2:"yutu"},{prop1:"xyz",prop2:"qwrq"}] 我想得到满足条件的所有元素的索引;在这种情况下,当prop1==“abc”时。因此,所需的输出类似于[0,1] 努力找到一个干净的方法来做到这一点? index=a.findIndex(x=>x.prop1==“abc”)将为上述数组返回0,因为它在第一次成功查找时停止 我觉得我想要这样的东西:index=a.f

我有这样一个数组:

[{prop1:"abc",prop2:"qwe"},{prop1:"abc",prop2:"yutu"},{prop1:"xyz",prop2:"qwrq"}]
我想得到满足条件的所有元素的索引;在这种情况下,当
prop1==“abc”
时。因此,所需的输出类似于
[0,1]

努力找到一个干净的方法来做到这一点?
index=a.findIndex(x=>x.prop1==“abc”)
将为上述数组返回
0
,因为它在第一次成功查找时停止

我觉得我想要这样的东西:
index=a.filtered(x.index()=>x.prop1==“abc”)

您可以使用这个方法

var data=[{prop1:“abc”,prop2:“qwe”},{prop1:“abc”,prop2:“yutu”},{prop1:“xyz”,prop2:“qwrq”}];
console.log(
数据减少(功能(arr、e、i){
如果(e.prop1=='abc')arr.push(i);
返回arr;
}, [])
)
//使用ES6箭头语法
console.log(
data.reduce((arr,e,i)=>((e.prop1=='abc')&arr.push(i,arr),[]))

)
您可以使用
reduce
功能

var数组=[{prop1:“abc”,prop2:“qwe”},
{prop1:“abc”,prop2:“yutu”},
{prop1:“xyz”,prop2:“qwrq”}];
var index=array.reduce((a,c,i/*当前索引*/)=>{
if(c.prop1==“abc”)a.push(i);//添加找到的索引。
返回a;
},[]/*累加器以存储找到的索引。*/);

console.log(索引)以下代码适用于我:

var data=[{prop1:“abc”,prop2:“qwe”},{prop1:“abc”,prop2:“yutu”},{prop1:“xyz”,prop2:“qwrq”}]
var索引=[]
data.forEach((元素,索引)=>{
如果(element.prop1==“abc”){
索引。推送(索引)
}
});

console.log(索引)
您可以使用
array.prototype.reduce
使用
速记,如果要使用一行代码:

var arr=[{prop1:“abc”,prop2:“qwe”},{prop1:“abc”,prop2:“yutu”},{prop1:“xyz”,prop2:“qwrq”}];
var指数=arr.reduce((m,e,i)=>(e.prop1=='abc'和&m.push(i,m),[]);

console.log(索引)有一种纯粹的功能性方法可以做到这一点,但它不是特别有效,因为它需要通过阵列进行三次单独的线性扫描:

let indexes = array.map((e, i) => [i, e])
                   .filter(([i, e]) => predicate(e))
                   .map(([i, _]) => i);
在哪里


这是通过创建一个临时数组来实现的,其中每个元素都是它自己,数组包含原始索引和元素。然后,它过滤掉那些谓词函数不为真的数组,然后剥离数组,使它们只包含索引。

您使用
filter
的示例通常不起作用。您可以使用
filter
在ES5/ES6/任何格式中编写它,然后使用
map
则不起作用。在这种特定情况下,它会产生正确的结果,但这只是因为条件与数组中的前x项匹配。如果没有给出这个条件,它将不起作用。@str:谢谢,更新了答案:)。。。我们只需要稍微改变一下顺序,即
reduce
filter
map
,或者
循环最佳实践?哇,很快就有很多答案。。这是一个愚蠢的问题吗?请注意,当你应该使用
===
时,请不要使用
==
。你能解释一下这个逗号和m是什么意思吗
(e.prop1=='abc'和&m.push(i),m)
@berkan这是JavaScript的。它确保始终执行
e.prop1==“abc”和&m.push(i)
,并且
m
始终作为结果返回。可以重写为。
let predicate = e => e.prop1 === 'abc';