根据一个对象,在数组里面找到对应对象的索引值,有什么好方法吗
刚动手写了一下,用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,比如你上面给出例子的“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就是你要的过滤数据,内容是过滤后的原数据索引号的数据
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决