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

时间:2014-10-18 17:42:26

标签: javascript jquery arrays object indexing

我知道给一个键(例如,如果我知道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?

3 个答案:

答案 0 :(得分:0)

假设您在评论中提到的nameagesize等变量中包含值,您可以使用以下函数:

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

的对象的索引