获取满足条件的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';