如何得知元素在数组中的某个位置

假设有个数组对象是这样

var qq = [
  
  {
    "group": 100,
    "info": {"event": 123},
    "name": "paul",
  },
  {
    "group": 100,
    "info": {"event": 323},
    "name": "james",
    "sp": 1
  },
  {
    "group": 103,
    "info": {"event": 123},
    "name": "jess",
    "sp": 13,
  },
  {
    "group": 103,
    "info": {"event": 323},
    "name": "andy",
    "sp": 10
  },
  {
    "group": 103,
    "info": {"event": 123},
    "name": "will",
    "sp": 1
  },
  {
    "group": 109,
    "info": {"event": 123},
    "name": "jason",
    "sp": 1
  }
  ];
  
  




group一样表示是一组的

那我要如何跑出每个的索引位置,像这样 0,1,0,1,2,0

阅读 5.7k
5 个回答
function finds(qq,str){
 var obj = {};
 for(var i=0;i<qq.length;i++){
  var group = qq[i].group;
  if(!obj[group]){
    obj[group] = {idx:1};
    if(qq[i].name==str)
      return group+':'+1;
  }else{
    obj[group].idx++;
    if(qq[i].name==str)
      return group+':'+obj[group].idx;
  }
 }
  return 'none:-1';
}
finds(qq,'andy');
// finds(qq,'jason');

其实是不可以的,数组有索引,对象是无序的!

不知道是否理解了你那个意思,大概写了一个demo,仅供参考!
let qq = [
    {
        "group": 100,
        "info": {"event": 123},
        "name": "paul",
    },
    {
        "group": 100,
        "info": {"event": 323},
        "name": "james",
        "sp": 1
    },
    {
        "group": 103,
        "info": {"event": 123},
        "name": "jess",
        "sp": 13,
    },
    {
        "group": 103,
        "info": {"event": 323},
        "name": "andy",
        "sp": 10
    },
    {
        "group": 103,
        "info": {"event": 123},
        "name": "will",
        "sp": 1
    },
    {
        "group": 109,
        "info": {"event": 123},
        "name": "jason",
        "sp": 1
    }
];
let findPosition = (arr,target) => {
    if(arr.length === 0) {
        return new Error("数据数组为空");
    }
    let getGroup = arr.filter( (item) => item.name === target);
    if(getGroup.length !== 1) {
        return new Error("未找到符合的数据或数据不唯一");
    }
    let groupNumber = getGroup[0].group;
    let result = arr.filter( (item) => item.group === groupNumber ).map( (item, index) => {
        if(item.name === target) {
            return `${target}在group ${item.group}中的第${index+1}位置`
        }
        return false;
    } ).filter( (item) => !!item);
    return result.length !== 1 ? '未找到数据或数据不唯一导致无法定位' : result[0];
}
let result1 = findPosition(qq, 'james');
let result2 = findPosition(qq, 'andy');
let result3 = findPosition(qq, 'jason');
console.log(result1); //james在group 100中的第2位置
console.log(result2); //andy在group 103中的第2位置
console.log(result3); //jason在group 109中的第1位置
groups = {};
find = "andy";
qq.forEach(v=> {
    groups[v.group]=++groups[v.group] || 1;
    v.name==find && console.log(v.group,groups[v.group]);
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题