JS数组取对象索引问题

图片描述

根据一个对象,在数组里面找到对应对象的索引值,有什么好方法吗

阅读 17.7k
6 个回答
var obj = {a:1}
var arr = [{b:2},{a:1},{c:3}]

function findIndex(l,o){
    var objStr = JSON.stringify(o)
    return l.reduce((index,ele,i)=>{
        if(JSON.stringify(ele) === objStr) {
            return i
        } else {
            return index
        }
    },-1)
}

console.log(findIndex(arr,obj))

刚动手写了一下,用findindex来实现,代码如下:
var arr = [{

id: 1,
block: 1,
name:"一号线",
size:0,
type:"xxx"

},{

id: 2,
block: 21,
name:"一号线",
size:0,
type:"xxx"

},

{
    id: 3,
    block: 3,
    name:"一号线",
    size:0,
    type:"xxx"

},
{
    id: 4,
    block: 4,
    name:"一号线",
    size:0,
    type:"xxx"

}];

//obj为要查询的对象
var obj={

id: 4,
block: 4,
name:"一号线",
size:0,
type:"xxx"

}
//查找指定对象在数组中的索引
var index=arr.findIndex(function (x) {

return x.id==obj.id

})
console.log("索引-----"+index)

对象有key。拿索引值来干嘛。
如果是数组:在找到对象的时候把索引值一起return ;就行了

首先确定对象里面具有唯一特性的key,比如你上面给出例子的“id”,
如果有的话,就把它当做比较的标准;如果没有的话,那就全量比较咯。

然后嘛,遍历数组,找子元素中id与对象id相等的项。

至于遍历嘛,不想自己写for循环,就用lodash这样的库咯。

循环函数:

    function find(arr, obj) {
      for (var i = 0,j = arr.length; i < j; i++) {
        var match = true
        // 如果id不具有唯一特性
        // Object.keys(obj).forEach(function(item) {
        //   if (obj[item] !== arr[i][item]) {
        //     match = false
        //   }
        // })
        
        // 如果id具有唯一特性
        if (obj.id !== arr[i].id) match = false
        if (match) return i
      }
      return -1
    }
    function thisindex(arr,myarr){
            return arr.findIndex(function(val,index){
                if(JSON.stringify(val)===JSON.stringify(myarr)){
                    return index;
                }
             });
        }   

let obj = {name:'cn',age:24,sex:'M'};
let arrs = [

{name:'cn',age:23,sex:'M'},
{name:'cn',age:23,sex:'M'},
{name:'cn',age:23,sex:'M'}

];
let newArrs = arrs.map(function(value,index){

return value.sex === obj.sex?index:null;

}).filter(function(Value){

return !!value

});

这个newArrs就是你要的过滤数据,内容是过滤后的原数据索引号的数据

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题