Jquery Multidimentional数组匹配和返回父数组值

时间:2015-07-02 16:15:43

标签: javascript jquery arrays

我有一个简单的问题,但仍然没有找到解决这个问题的想法。

我有这个数组:

var charsAndTypes = [
    {'type': 'Power', 'characters': ['Bunny','Buffalo']},
    {'type': 'Magic', 'characters': ['Sheep','Dragon']},
    {'type': 'Sense', 'characters': ['Fox','Lion']},
    {'type': 'Charm', 'characters': ['Cat','Raccoon']}
];

我需要搜索“人物”,比如“兔子”,然后抓住“类型”将其保存到var,尝试.map(),。filter,foreach inArray,但stil不起作用我想要吗

基本上我最终需要这样的功能

function searchInArray ( array, string ){
    //search in characters what array contains that string
    //then return the array that has the value
}

var charType = searchInArray(charsAndTypes, "Bunny"); 

//then the output must be "Power" in this case
console.log(charType.type);

5 个答案:

答案 0 :(得分:1)

只需循环遍历数组,并检查对象的数组是否具有值。



var charsAndTypes = [
    {'type': 'Power', 'characters': ['Bunny','Buffalo']},
    {'type': 'Magic', 'characters': ['Sheep','Dragon']},
    {'type': 'Sense', 'characters': ['Fox','Lion']},
    {'type': 'Charm', 'characters': ['Cat','Raccoon']}
];

function search (arr, char) {
  for (var i = 0; i < arr.length; i++) {
    if (arr[i].characters.indexOf(char) > -1) {
      return arr[i].type;
    }
  }
}

console.log(search(charsAndTypes, 'Bunny'));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可能需要的是find。它的工作方式与filter类似,但只返回数组中的一个值,而不是匹配数组。

function search(arr, char)
  return arr.find(function(charAndType){
    return ~charAndType.characters.indexOf(char);
  });
}

这是ES6,可能还不是跨浏览器。然而,该页面中有一个polyfill。

答案 2 :(得分:0)

一个简单的for循环。如果它没有找到它将返回undefined。

&#13;
&#13;
var charsAndTypes = [
    {'type': 'Power', 'characters': ['Bunny','Buffalo']},
    {'type': 'Magic', 'characters': ['Sheep','Dragon']},
    {'type': 'Sense', 'characters': ['Fox','Lion']},
    {'type': 'Charm', 'characters': ['Cat','Raccoon']}
];


function searchInArray ( array, string ){
    for(i=0;i<array.length;i++){
        if(array[i].characters.indexOf(string)>=0)
          return array[i];
    }
}

var charType = searchInArray(charsAndTypes, "Bunny"); 

//then the output must be "Power" in this case
console.log(charType.type);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

这个功能可以解决问题。

function searchInArray ( arr, string ){
    var found = false;
    $.each(arr, function(k,v) {
        if (v.characters.indexOf(string) != -1) {
            found = v;
            return false;
        }
    });
    return found;
}

小提琴:https://jsfiddle.net/kywoxut6/

答案 4 :(得分:0)

var charsAndTypes = [
    {'type': 'Power', 'characters': ['Bunny','Buffalo']},
    {'type': 'Magic', 'characters': ['Sheep','Dragon']},
    {'type': 'Sense', 'characters': ['Fox','Lion']},
    {'type': 'Charm', 'characters': ['Cat','Raccoon']}
];

var search = function (arr, char) {
    for (var index = 0; index < arr.length; index++) {
        if (arr[index].characters.indexOf(char) > -1) {
            return arr[index];
        }
    }
}

var charType = searchInArray(charsAndTypes, "Bunny");
console.log(charType.type);