按对象中的多个值搜索
2015-12-07
11070
根据这些答案,我应该能够通过多个值搜索对象。
不幸的是,
filter()
没有返回任何内容。 jQuery 的
grep()
也是如此。
Google 了 5 页,仍然找不到解决方案。
请帮忙。谢谢
https://jsfiddle.net/4z90rvk3/
var itemPrices = {
'1': { 'catid': '1', 'typeid': '1', 'price': '1000' },
'2': { 'catid': '1', 'typeid': '2', 'price': '1000' },
'3': { 'catid': '1', 'typeid': '3', 'price': '1100' },
'4': { 'catid': '2', 'typeid': '1', 'price': '1000' },
'5': { 'catid': '2', 'typeid': '2', 'price': '1000' },
'6': { 'catid': '2', 'typeid': '3', 'price': '1100' },
'7': { 'catid': '3', 'typeid': '1', 'price': '1200' },
'8': { 'catid': '3', 'typeid': '2', 'price': '1200' },
'9': { 'catid': '3', 'typeid': '3', 'price': '1300' },
'10': { 'catid': '4', 'typeid': '1', 'price': '1200' },
'11': { 'catid': '4', 'typeid': '2', 'price': '1200' },
'12': { 'catid': '4', 'typeid': '3', 'price': '1300' },
};
var price = itemPrices.filter(function(item) { return item.typeid == 1 && item.catid == 2; });
$('body').append(price);
3个回答
filter()
函数仅适用于数组。因此,您需要将
itemPrices
设为数组。有两种方法可以将对象转换为数组:
第一种方法是,如果您可以更改对象,请为其添加
length
属性,然后使用
Array.prototype.slice.call(itemPrices)
方法将其设为数组,请查看
更新后的 jsfiddle
。
第二个比较容易理解:
var itemPrices = {
'1': { 'catid': '1', 'typeid': '1', 'price': '1000' },
'2': { 'catid': '1', 'typeid': '2', 'price': '1000' },
'3': { 'catid': '1', 'typeid': '3', 'price': '1100' },
'4': { 'catid': '2', 'typeid': '1', 'price': '1000' },
'5': { 'catid': '2', 'typeid': '2', 'price': '1000' },
'6': { 'catid': '2', 'typeid': '3', 'price': '1100' },
'7': { 'catid': '3', 'typeid': '1', 'price': '1200' },
'8': { 'catid': '3', 'typeid': '2', 'price': '1200' },
'9': { 'catid': '3', 'typeid': '3', 'price': '1300' },
'10': { 'catid': '4', 'typeid': '1', 'price': '1200' },
'11': { 'catid': '4', 'typeid': '2', 'price': '1200' },
'12': { 'catid': '4', 'typeid': '3', 'price': '1300' },
};
var arr = [];
for (var item in itemPrices) {
if (itemPrices.hasOwnProperty(item)) {
arr.push(itemPrices[item])
}
}
var price = arr.filter(function(item) { return item.typeid == 1 && item.catid == 2; });
console.log(price);
参考:
iplus26
2015-12-07
这可能有效。 过滤函数仅适用于数组。
var itemPrices = [
{ 'catid': '1', 'typeid': '1', 'price': '1000' },
{ 'catid': '1', 'typeid': '2', 'price': '1000' },
{ 'catid': '1', 'typeid': '3', 'price': '1100' },
{ 'catid': '2', 'typeid': '1', 'price': '1000' },
{ 'catid': '2', 'typeid': '2', 'price': '1000' },
{ 'catid': '2', 'typeid': '3', 'price': '1100' },
{ 'catid': '3', 'typeid': '1', 'price': '1200' },
{ 'catid': '3', 'typeid': '2', 'price': '1200' },
{ 'catid': '3', 'typeid': '3', 'price': '1300' },
{ 'catid': '4', 'typeid': '1', 'price': '1200' },
{ 'catid': '4', 'typeid': '2', 'price': '1200' },
{ 'catid': '4', 'typeid': '3', 'price': '1300' },
];
var price = itemPrices.filter(function(item) { return item["typeid"] == 1 && item["catid"] == 2; });
FurkanO
2015-12-07
我知道这有点过分,但我喜欢这样做 假设你的对象有两个属性,例如类型和标题
var searchCategory = $('body .category-selector').val().toLowerCase().trim();
var searchText = $('body #search-text').val().toLowerCase().trim();
if (!searchText) {
searchText = false;
}
if (searchCategory === 'all') {
searchCategory = false;
}
var result = gamesData;
if (searchText !== false) {
result = result.filter(function(singleGame) {
var current_title = singleGame.title.toLowerCase().trim();
return current_title.indexOf(searchText) === -1 ? false : true;
});
}
if (searchCategory !== false) {
result = result.filter(function(singleGame) {
var current_category = singleGame.type.toLowerCase().trim();
return current_category == searchCategory;
});
}
return result;
coder618
2020-06-17