当前位置: 首页 > 知识库问答 >
问题:

根据条件查找所有索引

南宫俊喆
2023-03-14

如何根据对象数组的条件获取所有索引?我已经尝试了下面的代码,但是它只返回第一次出现的代码。

a = [
  {prop1:"abc",prop2:"yutu"},
  {prop1:"bnmb",prop2:"yutu"},
  {prop1:"zxvz",prop2:"qwrq"}];
    
index = a.findIndex(x => x.prop2 ==="yutu");

console.log(index);

共有3个答案

狄彬彬
2023-03-14

您可以使用 normal for 循环,当 prop2 匹配时推送数组中的索引

const a = [{
    prop1: "abc",
    prop2: "yutu"
  },
  {
    prop1: "bnmb",
    prop2: "yutu"
  },
  {
    prop1: "zxvz",
    prop2: "qwrq"
  }
];

const indArr = [];
for (let i = 0; i < a.length; i++) {
  if (a[i].prop2 === 'yutu') {
    indArr.push(i)
  }

}
console.log(indArr);
宗涵蓄
2023-03-14

尝试Array.reduce

js prettyprint-override">a = [
  {prop1:"abc",prop2:"yutu"},
  {prop1:"bnmb",prop2:"yutu"},
  {prop1:"zxvz",prop2:"qwrq"}];
    
index = a.reduce((acc, {prop2}, index) => prop2 ==="yutu" ? [...acc, index] : acc, []);

console.log(index);
邹玮
2023-03-14

< code>findIndex将只返回一个匹配的索引,您可以使用< code>filter根据属性< code>prop2检查值

a = [
  {prop1:"abc",prop2:"yutu"},
  {prop1:"bnmb",prop2:"yutu"},
  {prop1:"zxvz",prop2:"qwrq"}];
    
const allIndexes = a
  .map((e, i) => e.prop2 === 'yutu' ? i : -1)
  .filter(index => index !== -1);
  
  console.log(allIndexes);
  // This is one liner solution might not work in older IE ('flatMap')
 const  notSupportedInIE =a.flatMap((e, i) => e.prop2 === 'yutu' ? i : []);
 console.log(notSupportedInIE);
 类似资料:
  • 以下是两种猫鼬模式: 雇员模式: 员工详细模式: 雇员详细模式数据会按需保存,例如当特定状态分配给雇员时。在这种情况下,一旦保存了雇员详细信息文档,相应的雇员详细信息ID就会保存回雇员模式作为雇员详细信息ID 现在,员工模式和员工模式之间存在双向关系。 用例: 我想找到所有被标记为特定状态的员工。假设输入状态ID为,那么我想获取EmployeeDetail文档中状态ID为的所有员工。 以下是我尝试

  • 我想只从我的两个对象数组和中得到那些符合标准的子文档。即使我已经找到了这个stackoverflow答案#2(根据标准查找猫鼬子文档),它对我来说并不像期望的那样工作,或者我错过了一些东西。 我的文档如下所示: 它将在和中打印项目及其所有子文档。但是,我只想获取与给定上载id匹配的子文档。我做错了什么? 编辑:这个问题是指用猫鼬来解决它。我不能在Mongoose中使用这个问题的集合语句(只检索Mo

  • 本文向大家介绍在JavaScript中根据月份索引查找季度,包括了在JavaScript中根据月份索引查找季度的使用技巧和注意事项,需要的朋友参考一下 问题 我们需要编写一个JavaScript函数,该函数接受从1开始的月份索引,并返回该月份所在的季度。 示例 以下是代码- 输出结果 以下是控制台输出-

  • 我有以下字符串: 对于数组中的每个D,我是否可以知道在每个D之前和之后有多少个连续的T或D与每个D之前的字母相同。所以对于第一个D,它前面的字母是T,那么我想知道在第一个D之前和之后有多少个连续的T。对于第二个D,它前面的字母是Q,所以我想找出第二个D之前和之后连续Q的#。 例如,对于第一个D,在D之前有1个T,在出现Q之前有1个T(例如:对于第一个D,类似于“TDT”) 对于第二个D,有一个连续

  • 我有一个数据集 是否有任何方法可以确保,如果不同的的下一个值小于中的值,那么它应该在 列中执行加法。 下面是我期待的结果 所以基本上我寻求一个解决方案,对于每个唯一的< code>field_pointpath,如果它遇到一个小于前一个值的值,那么它应该将前一个值与下一个值相加。 if <代码>值[i 1]

  • 问题内容: 老实说,这个问题很简单。有没有一种方法可以快速查找数组中某个元素的所有出现而无需循环遍历它?似乎所有内置方法仅返回第一次出现的索引,而不是全部返回。 拥有返回索引数组的样式方法将是很不错的。有什么想法吗? 预先感谢您的任何投入! 编辑: 感谢大家的回复!看来我应该对此更加清楚。我目前的操作方式是扩展,其外观与下面发布的一个哑光非常相似。我知道,任何执行此操作的方法都必须在内部遍历数组,