有一個對象數組(489個對象)。一個對象有一個鍵有另一個對象(子對象)。子對象的數量是不確定的。我也創建了a fiddle。請在下面找到搜索功能:javascript - 搜索嵌套對象數組,如果在子代中找到值,則返回父級數
function getObjects(obj, key, val) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
parent = obj;
objects = objects.concat(getObjects(obj[i], key, val));
} else {
if(obj[i].toString().toLowerCase().indexOf(val.toString().toLowerCase()) > -1) {
objects.push(obj);
}
}
}
return objects;
}
在這裏,我要搜索的對象的數組,包括嵌套的對象(asset_info
)以及搜索字符串。沒有getObjects
的搜索可以正常使用以下功能。
this.data.filter(function(row){
var flag;
for(var prop in (columns.length > 0 ? columns : row)){
flag = false;
flag = row[columns.length > 0 ? columns[prop] :
prop].toString().toLowerCase().indexOf(searchString.toString().toLowerCase()) > -1;
if(flag)
break;
}
return flag;
在上面的函數中,我無法在嵌套對象(asset_info
)中搜索。所以我一直在使用我在網上找到的getObject
功能。
現在的問題是我無法搜索包括asset_info
但無法返回其父。例如在小提琴中,如果我搜索emc
,搜索應從data
返回第二個對象。
更新: still not able to return parent of a child where search string has been found
**更新2 **
var data = [
{
'booking_name': 'gtec/1101822/lmikdy/ls-rmea/oss11',
'asset_count': 2,
'pdg': 'Invalid',
'user_area': 'Invalid',
'deployment_number': 'Invalid',
'spoc': 'invalid',
'release': 'Invalid',
'start_date': '2017-06-12 00:00:00',
'end_date': '2017-06-16 00:00:00',
'asset_info': [
{
'bams_id': 'BAMS-1001423507',
'hostname': 'GTVOSS11',
'status': 10,
'site_location': 'IEAT01 Tipperary',
'rack_number': 'VIRTUAL RACK',
'rack_u_position': 0,
'manufacturer': 'EMC',
'model': 'VM',
},
{
'bams_id': 'BAMS-1001368001',
'hostname': 'None',
'status': 10,
'site_location': 'IEAT01 Tipperary',
'rack_number': 'VIRTUAL RACK',
'rack_u_position': 0,
'manufacturer': 'HP',
'model': 'HP BL460C GEN8',
}
],
'full_name': 'Invalid (invalid)',
'email_address': 'Invalid'
},
{
'booking_name': 'gtec/1101822/lmikdy/ls-rmea/oss11',
'asset_count': 2,
'pdg': 'Invalid',
'user_area': 'Invalid',
'deployment_number': 'Invalid',
'spoc': 'invalid',
'release': 'Invalid',
'start_date': '2017-06-12 00:00:00',
'end_date': '2017-06-16 00:00:00',
'asset_info': [
{
'bams_id': 'BAMS-1001423507',
'hostname': 'GTVOSS11',
'status': 10,
'site_location': 'IEAT01 Tipperary',
'rack_number': 'VIRTUAL RACK',
'rack_u_position': 0,
'manufacturer': 'EMC',
'model': 'VM',
}
],
'full_name': 'Invalid (invalid)',
'email_address': 'Invalid'
}];
在這裏,如果我搜索字符串 'EMC',它應該返回兩個對象。第一個對象將只有一個孩子,因爲只有一個對象的'製造商'爲'emc'。
輸出應該是:
[
{
'booking_name': 'gtec/1101822/lmikdy/ls-rmea/oss11',
'asset_count': 2,
'pdg': 'Invalid',
'user_area': 'Invalid',
'deployment_number': 'Invalid',
'spoc': 'invalid',
'release': 'Invalid',
'start_date': '2017-06-12 00:00:00',
'end_date': '2017-06-16 00:00:00',
'asset_info': [
{
'bams_id': 'BAMS-1001423507',
'hostname': 'GTVOSS11',
'status': 10,
'site_location': 'IEAT01 Tipperary',
'rack_number': 'VIRTUAL RACK',
'rack_u_position': 0,
'manufacturer': 'EMC',
'model': 'VM',
}
],
'full_name': 'Invalid (invalid)',
'email_address': 'Invalid'
},
{
'booking_name': 'gtec/1101822/lmikdy/ls-rmea/oss11',
'asset_count': 2,
'pdg': 'Invalid',
'user_area': 'Invalid',
'deployment_number': 'Invalid',
'spoc': 'invalid',
'release': 'Invalid',
'start_date': '2017-06-12 00:00:00',
'end_date': '2017-06-16 00:00:00',
'asset_info': [
{
'bams_id': 'BAMS-1001423507',
'hostname': 'GTVOSS11',
'status': 10,
'site_location': 'IEAT01 Tipperary',
'rack_number': 'VIRTUAL RACK',
'rack_u_position': 0,
'manufacturer': 'EMC',
'model': 'VM',
}
],
'full_name': 'Invalid (invalid)',
'email_address': 'Invalid'
}];
如何搜索字符串對象,包括嵌套的對象,如果搜索字符串的子對象發現返回父對象的數組內?
https://stackoverflow.com/questions/15523514/find-by-key-deep-in-a-nested-object –
@SimonPertersen我試着用你建議的解決方案。但是我無法返回找到搜索字符串的子對象的父對象。你可以看看這個https://jsfiddle.net/7eL7t0d1/6/ – Valay