Javascript 获取给定多个对象键的数组对象元素的索引

Javascript 获取给定多个对象键的数组对象元素的索引,javascript,jquery,arrays,object,indexing,Javascript,Jquery,Arrays,Object,Indexing,我知道给定一个键(例如,如果我知道object.name='Sam'),使用: 我可以使用object.name='Sam'获取数组元素的索引 但是,假设我在数组中有几个object.name='Sam'元素,但现在我知道object.name、object.age和object.size-是否可以调整上述代码以获得索引,同时检查object.age和object.size?假设您在变量中有值,例如name,age和size正如您在评论中提到的,您可以使用如下函数: function findI

我知道给定一个键(例如,如果我知道object.name='Sam'),使用:

我可以使用object.name='Sam'获取数组元素的索引
但是,假设我在数组中有几个object.name='Sam'元素,但现在我知道object.name、object.age和object.size-是否可以调整上述代码以获得索引,同时检查object.age和object.size?

假设您在变量中有值,例如
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;
};

如果您使用的是awesome下划线库,则有一个
..findWhere
函数

var sam21 = _.findWhere(people, {
  name: 'Sam', 
  age: 21
}); 
如果你想要一些没有整个其他库的东西,你可以使用
.filter

var sam21 = people.filter(function(person) {
  return person.age === 21 && person.name === 'Sam';
});

我刚注意到你在找索引。这个答案很有用:

您可以使用这样的函数

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; }

此函数将返回id=10且group=20的对象的索引,因为您有几个同名的元素,您正试图找出它们的索引@TJ不仅是名称匹配,而且年龄匹配和大小匹配。(这个是独一无二的,所以我不担心复制品)年龄和大小匹配什么。。?它们的值是什么?任何东西,让它们成为年龄和大小的变量。您可能应该使用过滤器而不是获取索引。使用过滤器,您只需逐个过滤每个属性(它是关联的)。
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 );