我有一个Object数组。我需要为每个属性应用包含过滤器(如果任何一个属性包含输入的值,它必须搜索该关键字并返回该对象)。请告诉我如何使用Jquery / Javascript进行contains
搜索。
示例:
var itemPrices = [
{ 'custName': 'Mike', 'custid': '1'},
{ 'custName': 'secondMike', 'custid': '2' },
{ 'custName': 'Ben', 'custid': '3' },
{ 'custName': 'dan', 'custid': '4' }
];
所以,从上面的数组中,如果我搜索Mike,它必须在custName中返回包含mike的2条记录,或者如果我搜索1,它必须返回id为1的客户。所以它必须搜索每个和每个对象中的每个属性并返回匹配的对象。
它更像是对象数组中的一般搜索。
由于
答案 0 :(得分:3)
您可以通过检查所有属性来过滤数组。
如果您的属性不是字符串,则需要在使用String#indexOf
之前转换为字符串。
function search(array, value) {
value = value.toString().toLowerCase();
return array.filter(function (o) {
return Object.keys(o).some(function (k) {
return o[k].toString().toLowerCase().indexOf(value) !== -1;
});
});
}
var itemPrices = [{ custName: 'Mike', custid: '1'}, { custName: 'secondMike', custid: '2' }, { custName: 'Ben', custid: '3' }, { custName: 'dan', custid: '4' }];
console.log(search(itemPrices, 'Mike'));
console.log(search(itemPrices, 2));

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:1)
这可以通过迭代对象数组来完成,然后是每个对象的属性,如下所示:
var matches = [];
var searchString = 'Mike';
var itemPrices = [
{ 'custName': 'Mike', 'custid': '1'},
{ 'custName': 'secondMike', 'custid': '2' },
{ 'custName': 'Ben', 'custid': '3' },
{ 'custName': 'dan', 'custid': '4' }
];
for (var i = 0; i < itemPrices.length; i++) {
for(var prop in itemPrices[i]) {
if (itemPrices[i][prop].includes(searchString)) {
matches.push(itemPrices[i]);
break;
}
}
}
console.log(matches);
作为一种功能,因为这是一种更可重复使用的解决方案:
function searchObjectArrayProperties(searchString, arrayToSearch) {
var matches = [];
for (var i = 0; i < arrayToSearch.length; i++) {
for(var prop in arrayToSearch[i]) {
if (arrayToSearch[i][prop].includes(searchString)) {
matches.push(arrayToSearch[i]);
break;
}
}
}
return matches;
}
var itemPrices = [
{ 'custName': 'Mike', 'custid': '1'},
{ 'custName': 'secondMike', 'custid': '2' },
{ 'custName': 'Ben', 'custid': '3' },
{ 'custName': 'dan', 'custid': '4' }
];
// Then use the function like:
console.log(searchObjectArrayProperties('Mike', itemPrices));
答案 2 :(得分:0)
使用数组&#39; filter()
:
var itemPrices = [
{ 'custName': 'Mike', 'custid': '1'},
{ 'custName': 'secondMike', 'custid': '2'},
{ 'custName': 'Ben', 'custid': '3' },
{ 'custName': 'dan', 'custid': '4' }
];
function searchPrices(str, itemPricesArray){
var itemPricesRes = itemPricesArray.filter(function(item){
return item.custName.toLowerCase().includes(str.toLowerCase()) || item.custid.includes(str)
});
return itemPricesRes;
}
console.log(searchPrices('Mike', itemPrices));
console.log(searchPrices('1', itemPrices));
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 3 :(得分:0)
const filterPrices = (arr, value) => arr
.filter(e => Object.values(e)
.some(f => f.includes(value)));
此功能应该有效。它需要搜索对象数组和值。
它过滤数组,检查对象的值(Object.values
),然后检查值数组的任何值(.some
)是否包含搜索的值。
这假设您在正在开发的环境中支持String.prototype.includes
和Object.values
。