2017-06-04 59 views
0

搜索對象的屬性比方說,我有一個這樣的對象:的JavaScript - 由項,並添加其值設置爲數組

var object = { 
    "Defender": { 
    "player-1868": { 
     "birthdate": "1 July 1996", 
     "club_country": "IQ", 
     "club_id": 171, 
     "club_name": "Erbil", 
     "forename": "Burhan Jumaah", 
     "id": 1868, 
     "league_id": 12, 
     "league_name": "Iraqi Premier League", 
     "name": "Burhan Jumaah", 
     "nationality": "iq", 
     "nationality_full": "Iraq", 
     "position": "Defender", 
     "surname": "Razzaq", 
     "votes": [ 
     "y884F42mLCVdld5V5cMeRpl11gJ2" 
     ] 
    } 
    }, 
    "Goalkeeper": { 
    "player-3076": { 
     "birthdate": "15 December 1985", 
     "club_country": "QA", 
     "club_id": 1, 
     "club_name": "Lekhwiya", 
     "comments": [ 
     { 
      "comment": "xxx", 
      "name": "guy tester", 
      "photoURL": "http://pbs.twimg.com/profile_images/855450315704979460/RGiq07D7_normal.jpg", 
      "time": 1496529030321, 
      "user": "y884F42mLCVdld5V5cMeRpl11gJ2" 
     } 
     ], 
     "forename": "Qasem Abdulhamed", 
     "id": 3076, 
     "league_id": 1, 
     "league_name": "Qatar Stars League", 
     "name": "Qasem Burhan", 
     "nationality": "qa", 
     "nationality_full": "Qatar", 
     "position": "Goalkeeper", 
     "surname": "Burhan", 
     "votes": [ 
     "y884F42mLCVdld5V5cMeRpl11gJ2" 
     ] 
    }, 
    "player-3532": { 
     "birthdate": "2 April 1992", 
     "club_country": "SA", 
     "club_id": 18, 
     "club_name": "Al Ittihad", 
     "forename": "Fawaz", 
     "id": 3532, 
     "league_id": 2, 
     "league_name": "Saudi Professional League", 
     "name": "Fawaz Al Qarni", 
     "nationality": "sa", 
     "nationality_full": "Saudi Arabia", 
     "position": "Goalkeeper", 
     "surname": "Al Qarni", 
     "votes": [ 
     "y884F42mLCVdld5V5cMeRpl11gJ2" 
     ] 
    } 
    } 
}; 

我將如何使用lodash,遍歷該對象,並添加每次財產id出現在player-xxxxxx的對象鍵中,將該值添加到數組中。從本質上講,讓所有的球員ID在一個array

+2

預計結果是「[1868,3076,3532]」?你可以包括你嘗試解決問題的'javascript'嗎? – guest271314

+4

SO不是免費的編碼服務。你必須嘗試自己解決問題。如果無法正常工作,請發佈您嘗試的內容,我們會幫助您解決問題。 – Barmar

+0

你可以將標題從'Javascript -'改爲'Lodash'嗎?使其對您的問題的欺騙性降低。 –

回答

0

使用JavaScript,遍歷鍵,讓每個ID,你可以使用「爲」像下面的示例代碼:

var obj = { 
    "Defender": { 
    "player-1868": { 
     "birthdate": "1 July 1996", 
     "club_country": "IQ", 
     "club_id": 171, 
     "club_name": "Erbil", 
     "forename": "Burhan Jumaah", 
     "id": 1868, 
     "league_id": 12, 
     "league_name": "Iraqi Premier League", 
     "name": "Burhan Jumaah", 
     "nationality": "iq", 
     "nationality_full": "Iraq", 
     "position": "Defender", 
     "surname": "Razzaq", 
     "votes": [ 
     "y884F42mLCVdld5V5cMeRpl11gJ2" 
     ] 
    } 
    }, 
    "Goalkeeper": { 
    "player-3076": { 
     "birthdate": "15 December 1985", 
     "club_country": "QA", 
     "club_id": 1, 
     "club_name": "Lekhwiya", 
     "comments": [ 
     { 
      "comment": "xxx", 
      "name": "guy tester", 
      "photoURL": "http://pbs.twimg.com/profile_images/855450315704979460/RGiq07D7_normal.jpg", 
      "time": 1496529030321, 
      "user": "y884F42mLCVdld5V5cMeRpl11gJ2" 
     } 
     ], 
     "forename": "Qasem Abdulhamed", 
     "id": 3076, 
     "league_id": 1, 
     "league_name": "Qatar Stars League", 
     "name": "Qasem Burhan", 
     "nationality": "qa", 
     "nationality_full": "Qatar", 
     "position": "Goalkeeper", 
     "surname": "Burhan", 
     "votes": [ 
     "y884F42mLCVdld5V5cMeRpl11gJ2" 
     ] 
    }, 
    "player-3532": { 
     "birthdate": "2 April 1992", 
     "club_country": "SA", 
     "club_id": 18, 
     "club_name": "Al Ittihad", 
     "forename": "Fawaz", 
     "id": 3532, 
     "league_id": 2, 
     "league_name": "Saudi Professional League", 
     "name": "Fawaz Al Qarni", 
     "nationality": "sa", 
     "nationality_full": "Saudi Arabia", 
     "position": "Goalkeeper", 
     "surname": "Al Qarni", 
     "votes": [ 
     "y884F42mLCVdld5V5cMeRpl11gJ2" 
     ] 
    } 
    } 
}; 

var arr = []; 
tgtObj = obj["Defender"]; 
for(var key in tgtObj){ 
    if (tgtObj.hasOwnProperty(key)){ 
    console.log(key); 
    arr.push(tgtObj[key]["id"]); 
    } 
} 
tgtObj = obj["Goalkeeper"]; 
for(var key in tgtObj){ 
    if (tgtObj.hasOwnProperty(key)){ 
    console.log(key); 
    arr.push(tgtObj[key]["id"]); 
    } 
} 
console.log(arr); 
+0

如果我的回答被接受,請打勾。謝謝。 – bboy

0

迭代通過對象鍵檢查,看看是否字符串以「播放器 - 啓動「然後將最後四個字符推入空數組中。

var object = { 
 
    "Defender": { 
 
    "player-1868": { 
 
     "birthdate": "1 July 1996", 
 
     "club_country": "IQ", 
 
     "club_id": 171, 
 
     "club_name": "Erbil", 
 
     "forename": "Burhan Jumaah", 
 
     "id": 1868, 
 
     "league_id": 12, 
 
     "league_name": "Iraqi Premier League", 
 
     "name": "Burhan Jumaah", 
 
     "nationality": "iq", 
 
     "nationality_full": "Iraq", 
 
     "position": "Defender", 
 
     "surname": "Razzaq", 
 
     "votes": [ 
 
     "y884F42mLCVdld5V5cMeRpl11gJ2" 
 
     ] 
 
    } 
 
    }, 
 
    "Goalkeeper": { 
 
    "player-3076": { 
 
     "birthdate": "15 December 1985", 
 
     "club_country": "QA", 
 
     "club_id": 1, 
 
     "club_name": "Lekhwiya", 
 
     "comments": [{ 
 
     "comment": "xxx", 
 
     "name": "guy tester", 
 
     "photoURL": "http://pbs.twimg.com/profile_images/855450315704979460/RGiq07D7_normal.jpg", 
 
     "time": 1496529030321, 
 
     "user": "y884F42mLCVdld5V5cMeRpl11gJ2" 
 
     }], 
 
     "forename": "Qasem Abdulhamed", 
 
     "id": 3076, 
 
     "league_id": 1, 
 
     "league_name": "Qatar Stars League", 
 
     "name": "Qasem Burhan", 
 
     "nationality": "qa", 
 
     "nationality_full": "Qatar", 
 
     "position": "Goalkeeper", 
 
     "surname": "Burhan", 
 
     "votes": [ 
 
     "y884F42mLCVdld5V5cMeRpl11gJ2" 
 
     ] 
 
    }, 
 
    "player-3532": { 
 
     "birthdate": "2 April 1992", 
 
     "club_country": "SA", 
 
     "club_id": 18, 
 
     "club_name": "Al Ittihad", 
 
     "forename": "Fawaz", 
 
     "id": 3532, 
 
     "league_id": 2, 
 
     "league_name": "Saudi Professional League", 
 
     "name": "Fawaz Al Qarni", 
 
     "nationality": "sa", 
 
     "nationality_full": "Saudi Arabia", 
 
     "position": "Goalkeeper", 
 
     "surname": "Al Qarni", 
 
     "votes": [ 
 
     "y884F42mLCVdld5V5cMeRpl11gJ2" 
 
     ] 
 
    } 
 
    } 
 
}; 
 

 
function getPlayers(object) { 
 
    let items = []; 
 
    for (let i in object) { 
 
    let key = Object.keys(object[i]); 
 
    key.forEach(i => i.startsWith('player') ? items.push(i.substring(i.length -4)) : ''); 
 
    } 
 
    return items; 
 
} 
 
console.log(getPlayers(object));

1

您可以Array#reduce遞歸地對對象的鍵查找搜索字符串(播放器 - ),以及創建和提取值:

var object = {"Defender":{"player-1868":{"birthdate":"1 July 1996","club_country":"IQ","club_id":171,"club_name":"Erbil","forename":"Burhan Jumaah","id":1868,"league_id":12,"league_name":"Iraqi Premier League","name":"Burhan Jumaah","nationality":"iq","nationality_full":"Iraq","position":"Defender","surname":"Razzaq","votes":["y884F42mLCVdld5V5cMeRpl11gJ2"]}},"Goalkeeper":{"player-3076":{"birthdate":"15 December 1985","club_country":"QA","club_id":1,"club_name":"Lekhwiya","comments":[{"comment":"xxx","name":"guy tester","photoURL":"http://pbs.twimg.com/profile_images/855450315704979460/RGiq07D7_normal.jpg","time":1496529030321,"user":"y884F42mLCVdld5V5cMeRpl11gJ2"}],"forename":"Qasem Abdulhamed","id":3076,"league_id":1,"league_name":"Qatar Stars League","name":"Qasem Burhan","nationality":"qa","nationality_full":"Qatar","position":"Goalkeeper","surname":"Burhan","votes":["y884F42mLCVdld5V5cMeRpl11gJ2"]},"player-3532":{"birthdate":"2 April 1992","club_country":"SA","club_id":18,"club_name":"Al Ittihad","forename":"Fawaz","id":3532,"league_id":2,"league_name":"Saudi Professional League","name":"Fawaz Al Qarni","nationality":"sa","nationality_full":"Saudi Arabia","position":"Goalkeeper","surname":"Al Qarni","votes":["y884F42mLCVdld5V5cMeRpl11gJ2"]}}}; 
 

 
function searchProps(searchStr, object) { 
 
    return Object.keys(object).reduce(function(arr, key) { // reduce the objects keys to an array 
 
    key.indexOf(searchStr) === -1 || arr.push(key.slice(searchStr.length)); // if a key contains the search string, take whatever after it 
 
    
 
    var propValue = object[key]; 
 
    
 
    if(typeof propValue === 'object' && propValue !== null) { // if the value of the property is an array, run it through search props 
 
     return arr.concat(searchProps(searchStr, propValue)); 
 
    } 
 
    
 
    return arr; 
 
    }, []); 
 
} 
 

 
var result = searchProps('player-', object); 
 

 
console.log(result);

+0

呵呵,今天我瞭解了'Object.keys()'reduce。謝謝 – nn2

0

經過一段時間後,我能夠自己解決這個問題。

var obj = { 
 
    Defender: { 
 
    "player-1868": { 
 
     club_id: 171, 
 
     id: 1868, 
 
     league_id: 12, 
 
     name: "Burhan Jumaah" 
 
    } 
 
    }, 
 
    Goalkeeper: { 
 
    "player-3076": { 
 
     club_id: 1, 
 
     id: 3076, 
 
     league_id: 1, 
 
     name: "Qasem Burhan" 
 
    }, 
 
    "player-3532": { 
 
     club_id: 18, 
 
     id: 3532, 
 
     league_id: 2, 
 
     name: "Fawaz Al Qarni" 
 
    } 
 
    } 
 
}; 
 

 
function searchForProp(lookingFor, obj, arrYielded) { 
 
    var arr = arrYielded ? arrYielded : []; 
 
    Object.keys(obj).forEach(function(key, idx) { 
 
    if (typeof(obj[key]) === 'object') { 
 
\t \t searchForProp(lookingFor, obj[key], arr); 
 
\t } else { 
 
     if (key === 'id') { 
 
\t \t arr.push(obj[key]); 
 
\t } 
 
    } 
 
    }); 
 
\t return arr; 
 
} 
 

 
var allIDs = searchForProp('id', obj); 
 
console.log(allIDs);

0

,我能想到用lodash的最簡單的方法:

_(object).map(_.keys).flatten().value(); 

當然,這是假設的播放鍵總是在物體層級中同一級別。