我将如何在javascript中编写一个通用函数,该函数将在对象数组上进行搜索以得到结果。
例如,假设我有一个对象数组。
var arr= [
{a: 1011, b: "abc"},
{a: 2012, b: "abd"},
{a: 2013, b: "cbde"},
{a: 2014, b: "xyz"}
];
Search(arr,“ 101”)将在数组下方返回
[{a: 1011, b: "abc"}]
和Search(arr,“ bd”)将在数组
下返回[{a: 2012, b: "abd"},
{a: 2013, b: "cbde"}]
答案 0 :(得分:1)
谢谢杰夫的回答。使用杰夫的答案解决问题。
function filter(data,txt ) {
return data.filter(e => {
const entries = Object.entries(e);
return entries.some(entry=>entry[1]?entry[1].toString().includes(txt):false);
});
}
答案 1 :(得分:0)
const search = "ab";
arr.filter(e => {
const entries = Object.entries(e);
return entries.some( entry =>
entry[0].toString().includes(search) || entry[1].toString().includes(search))
})
我还没有检查过,但应该接近您的要求。
答案 2 :(得分:0)
也许您可以通过属性和值找到对象。
您可以使用此功能:
function findObjectByText(arr, property, value) {
var result = arr.filter(function(x) {
return x[property] === value;
});
return result;
}
用法:
var test = findObjectByText(arr, "a", 1011);
console.log(test);
结果:
类似这样的东西:
(function() {
var arr = [{
a: 1011,
b: "abc"
},
{
a: 2012,
b: "abd"
},
{
a: 2013,
b: "cbde"
},
{
a: 2014,
b: "xyz"
}
];
function findObjectByText(arr, property, value) {
var result = arr.filter(function(x) {
return x[property] === value;
});
return result;
}
var test = findObjectByText(arr, "a", 1011);
console.log(test);
}());
更新:使用通用功能。
function search(arr, value) {
for (var i in arr) {
for (var j in arr[i]) {
if (arr[i][j] === value) {
return arr[i];
}
}
}
return null;
}
结果:
类似这样的东西:
(function() {
var arr = [{
a: 1011,
b: "abc"
},
{
a: 2012,
b: "abd"
},
{
a: 2013,
b: "cbde"
},
{
a: 2014,
b: "xyz"
}
];
function search(arr, value) {
for (var i in arr) {
for (var j in arr[i]) {
if (arr[i][j] === value) {
return arr[i];
}
}
}
return null;
}
var test = search(arr, 1011);
console.log(test);
}());