搜索多维数组JavaScript

时间:2013-09-19 14:15:25

标签: javascript jquery arrays

我试图检索数组项目时遇到困难。所以这里是交易。我有一个二维数组,它有价值和关键,所以我的数据的例子是:

[
    Object { css="SS", title="Apple"}, 
    Object { css="SS", title="Orange"}, 
    Object { css="SS", title="Banana"}
]

我想查看上面数组中是否存在对象。我不知道为什么它不起作用,这是我的代码找到对象:

jQuery.inArray("Apple", fruits["title"]); //this returns -1 why?

如何搜索二维数组?

7 个答案:

答案 0 :(得分:1)

这不是2D数组,这是一个对象数组,所以这应该有效:

for (var i = 0; i < array.length; i++) {
    console.log(array[i].title); //Log the title of each object.
    if (array[i].title == "Apple") {
        console.log("Found apple!");
    }
}

此外,对象是键/值对,由key : val表示,而不是key = val。您的数组有语法错误,不应该运行。

答案 1 :(得分:1)

要迂腐,你有一个对象数组,而不是二维数组。您的对象参数的语法也不正确。

您可以在数组上使用filter()来查找值:

var array = [
    { css: "SS", title: "Apple"}, 
    { css: "SS", title: "Orange"}, 
    { css: "SS", title: "Banana"}
];
var matches = array.filter(function (obj) { return obj.title == "Apple" });
if (matches.length) {
    // Apple was in the array...
}

答案 2 :(得分:0)

如果你有这样的对象

var peoples = [
  { "name": "bob", "dinner": "pizza" },
  { "name": "john", "dinner": "sushi" },
  { "name": "larry", "dinner": "hummus" }
];

忽略下面的内容。使用filter方法!

peoples.filter(function (person) { return person.dinner == "sushi" });
  // => [{ "name": "john", "dinner": "sushi" }]

您可以搜索"dinner": "sushi"使用map

的人
peoples.map(function (person) {
  if (person.dinner == "sushi") {
    return person
  } else {
    return null
  }
}); // => [null, { "name": "john", "dinner": "sushi" }, null]

reduce

peoples.reduce(function (sushiPeople, person) {
  if (person.dinner == "sushi") {
    return sushiPeople.concat(person);
  } else {
    return sushiPeople
  }
}, []); // => [{ "name": "john", "dinner": "sushi" }]

我确信你能够将其概括为任意键和值!

答案 3 :(得分:0)

fruits可能是一个数组,fruits["title"]因此不存在。 您可能想要转换数据:

var fruitTitles = fruits.map(function(f) { return f.title; });
jQuery.inArray("Apple", fruitTitles);

答案 4 :(得分:0)

来自jQuery文档: jQuery.inArray(value,array [,fromIndex])

我从未使用过这种方法,但很快就猜到了: var hasIt = jQuery.inArray({css:“SS”,title:“Apple”},myArray);

答案 5 :(得分:0)

正如the $.inArray() documentation所解释的那样,该函数的第一个参数是要搜索的值。您的数组没有任何与第一个参数中提供的 string "Apple"相等的元素,因为您的数组元素都不是字符串(它们都是对象)。 / p>

$.inArray()的第二个参数应该是数组本身,但是(假设fruits是您显示的数组)fruits["title"]未定义,因为您的数组没有名为{{的属性1}},只有数组中的对象具有该属性。

请改为尝试:

"title"

答案 6 :(得分:0)

试试这段代码

var fruits = [
    { css:"SS", title:"Apple"}, 
    { css:"SS", title:"Orange"}, 
    { css:"SS", title:"Banana"}
];

jQuery.grep(fruits,function(fruit){return fruit.title == 'Apple'});