我知道给一个键(例如,如果我知道object.name ='Sam')使用:
var index = array.map(function(el) {return el.name}).indexOf('Sam');
我可以使用object.name ='Sam'获取数组元素的索引 但是说我在数组中有几个带有object.name ='Sam'的元素,但现在我知道了对象.name,object.age和object.size - 是否可以调整上面的代码来获取索引但是检查object.age和object.size?
答案 0 :(得分:0)
假设您在评论中提到的name
,age
和size
等变量中包含值,您可以使用以下函数:
function findInArray(arr) {
for (var i = 0; i < arr.length; i++) {
var el = arr[i];
if (el.name == name && el.age == age && el.size == size)
return i;
}
return -1;
};
如果找到匹配,将返回数组中对象的索引,否则-1
将返回...
var data = [{
name: "Sis",
age: "17",
size: "10"
}, {
name: "Sam",
age: "17",
size: "10"
}, {
name: "Som",
age: "17",
size: "10"
}],
name = "Sam",
age = "17",
size = "10";
function findInArray(arr) {
for (var i = 0; i < arr.length; i++) {
var el = arr[i];
if (el.name == name && el.age == age && el.size == size)
return i;
}
return -1;
};
console.log(findInArray(data));
答案 1 :(得分:0)
如果您使用了令人敬畏的下划线库,那么_.findWhere
功能就会出现。
var sam21 = _.findWhere(people, {
name: 'Sam',
age: 21
});
如果您想要一些没有其他库的东西,可以使用.filter
。
var sam21 = people.filter(function(person) {
return person.age === 21 && person.name === 'Sam';
});
我刚注意到你正在寻找索引。这个答案很有用:https://stackoverflow.com/a/12356923/191226
答案 2 :(得分:0)
你可以使用像这样的功能
indexOfObjectArray = function(array, keyvalues) {
for (var i = 0; i < array.length; i++) {
var trueCount = 0;
for (var j = 0; j < keyvalues.length; j++) {
if (array[i][keyvalues[j]['key']] == keyvalues[j]['value']) {
trueCount++;
}
}
if (trueCount === keyvalues.length) return i;
}
return -1; }
并使用它,例如:
var yourArray = [{id: 10, group: 20},...];
var keyvalues = [
{ 'key': 'id', 'value': 10 },
{ 'key': 'group', 'value': 20 }];
var index = indexOfObjectArray(yourArray, keyvalues );
此函数将返回id = 10且group = 20
的对象的索引