我试图检索数组项目时遇到困难。所以这里是交易。我有一个二维数组,它有价值和关键,所以我的数据的例子是:
[
Object { css="SS", title="Apple"},
Object { css="SS", title="Orange"},
Object { css="SS", title="Banana"}
]
我想查看上面数组中是否存在对象。我不知道为什么它不起作用,这是我的代码找到对象:
jQuery.inArray("Apple", fruits["title"]); //this returns -1 why?
如何搜索二维数组?
答案 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]
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'});