1

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

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

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

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

任何想法如何搜索二维数组?

4

7 回答 7

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...
}
于 2013-09-19T14:20:53.010 回答
1

这不是一个二维数组,这是一个对象数组,所以应该可以:

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。您的数组有语法错误,不应运行。

于 2013-09-19T14:18:32.907 回答
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" }]

我相信您能够将其推广到任意键和值!

于 2013-09-19T14:18:58.490 回答
0

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

var fruitTitles = fruits.map(function(f) { return f.title; });
jQuery.inArray("Apple", fruitTitles);
于 2013-09-19T14:19:38.023 回答
0

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

我从未使用过这种方法,但快速猜测一下: var hasIt = jQuery.inArray({css:"SS",title:"Apple"}, myArray);

于 2013-09-19T14:20:03.403 回答
0

正如文档$.inArray()解释的,该函数的第一个参数是要搜索的值。您的数组没有任何元素等于您在第一个参数中提供的字符串 "Apple",因为您的数组元素都不是字符串(它们都是对象)。

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

试试这个:

var index = $.inArray("Apple", $.map(fruits, function(el) { return el.title; }));
于 2013-09-19T14:22:53.657 回答
0

试试这个代码

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

jQuery.grep(fruits,function(fruit){return fruit.title == 'Apple'});
于 2013-09-19T14:23:35.130 回答