Javascript 查找与某个条件匹配的数组索引,然后推入另一个数组

Javascript 查找与某个条件匹配的数组索引,然后推入另一个数组,javascript,Javascript,我试图找到一种更简洁的方法,在数组中查找与条件匹配的索引,然后将它们推送到数组中。我做了一些尝试,但要么没有返回我想要的答案,要么太冗长 有没有人能在这里解释一下ES6的最好方法是什么?谢谢你的帮助 var arr=[“00”、“000”、“0”、“000”], p=[]; var l=(arr.reduce((a,b)=>a.length>b.length?a:b)).length; arr.filter(c=>c.length==l);//返回[“000”,“000”] arr.map(c

我试图找到一种更简洁的方法,在数组中查找与条件匹配的索引,然后将它们推送到数组中。我做了一些尝试,但要么没有返回我想要的答案,要么太冗长

有没有人能在这里解释一下ES6的最好方法是什么?谢谢你的帮助

var arr=[“00”、“000”、“0”、“000”],
p=[];
var l=(arr.reduce((a,b)=>a.length>b.length?a:b)).length;
arr.filter(c=>c.length==l);//返回[“000”,“000”]
arr.map(c=>c.length==l);//返回[假,真,假,假,真]
arr.map((c,i)=>c.length==l?i:c);//返回[“00”、“1”、“0”、“4]
//arr.findIndex(返回c.length==l)//错误
函数长指令(el){
返回el.length==l
}//仅返回1(在控制台记录之后)
console.log(arr.findIndex(longesinstances));
对于(i=0;i
匹配条件 这个答案假设您希望得到与数组中具有最大长度的元素长度相等的元素的索引


获取索引 为了得到最长元素的长度,我们首先得到每个元素的长度,然后减少数组以便只得到最大长度

接下来,我们将数组的每个元素映射到两个元素中的一个;如果元素的长度与最大长度相同,则取其索引。如果不是,那么我们将映射
false
。我们这样做是为了过滤掉那些值

最后,我们过滤掉假值。这些值没有最大长度那么长,所以我们不需要它们


正如前面提到的,
forEach
可能以更直接、更具可读性的方式实现这一点。以这种方式试验链式数组方法将使您能够做出一个很好的决定,确定哪种代码最适合您所面临的情况

如果您使用的是非常大的数据集,那么以牺牲性能为代价对数据进行多次迭代以提高代码可读性可能是个坏主意

const arr=[“00”、“000”、“0”、“000”]
常量maxLength=arr
.map(e=>e.length)
.减少((a,b)=>a>b?a:b)
const result=arr
.map((val,i)=>val.length==maxLength?i:false)//如果项的长度为1,则记录该项的索引
.filter(i=>i!==false)//删除非truthy元素
console.dir(结果)
匹配条件 这个答案假设您希望得到与数组中具有最大长度的元素长度相等的元素的索引


获取索引 为了得到最长元素的长度,我们首先得到每个元素的长度,然后减少数组以便只得到最大长度

接下来,我们将数组的每个元素映射到两个元素中的一个;如果元素的长度与最大长度相同,则取其索引。如果不是,那么我们将映射
false
。我们这样做是为了过滤掉那些值

最后,我们过滤掉假值。这些值没有最大长度那么长,所以我们不需要它们


正如前面提到的,
forEach
可能以更直接、更具可读性的方式实现这一点。以这种方式试验链式数组方法将使您能够做出一个很好的决定,确定哪种代码最适合您所面临的情况

如果您使用的是非常大的数据集,那么以牺牲性能为代价对数据进行多次迭代以提高代码可读性可能是个坏主意

const arr=[“00”、“000”、“0”、“000”]
常量maxLength=arr
.map(e=>e.length)
.减少((a,b)=>a>b?a:b)
const result=arr
.map((val,i)=>val.length==maxLength?i:false)//如果项的长度为1,则记录该项的索引
.filter(i=>i!==false)//删除非truthy元素

console.dir(result)
您可以通过获取与长度条件匹配的索引来减少数组

var数组=[“00”、“000”、“0”、“000”],
索引=数组。减少((r,s,i,a)=>{
如果(!r | | s.length>a[r[0]].length){//检查初始长度或更大的长度
返回[i];
}
如果(s.length==a[r[0]].length){//检查相同的长度
r、 推(i);
}
返回r;
},未定义);

console.log(索引);//[1,4]
您可以通过获取与长度条件匹配的索引来减少数组

var数组=[“00”、“000”、“0”、“000”],
索引=数组。减少((r,s,i,a)=>{
如果(!r | | s.length>a[r[0]].length){//检查初始长度或更大的长度
返回[i];
}
如果(s.length==a[r[0]].length){//检查相同的长度
r、 推(i);
}
返回r;
},未定义);

console.log(索引);//[1,4]
我的理解是,您希望在
arr
中找到最长字符串所在的索引,因为您已经找到了最长字符串长度
l

一个简单的循环似乎是最直接的,可能是使用
forEach
(当然,也可能是问题中的
for
循环):

实例:

var arr=[“00”、“000”、“0”、“000”]、p=[];
var l=(arr.reduce((a,b)=>a.length>b.length?a:b)).length;
var指数=[];
arr.forEach((s,i)=>{
如果(s.length==l){
指数推送(i);
}
});

console.log(索引)
我的理解是,您希望在
arr
中找到最长字符串所在的索引,因为您已经找到了最长字符串长度
l

一个简单的循环似乎是最直接的
var indexes = [];
arr.forEach((s,i) => {
  if (s.length === l) {
    indexes.push(i);
  }
});