假设我有一个这样的对象:
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
?
答案 0 :(得分:1)
你可以Array#reduce
递归对象的键来查找搜索字符串(player-),并创建和提取值:
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);

答案 1 :(得分:0)
使用Javascript,遍历密钥并获取每个id,您可以使用" for"如下面的示例代码:
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);
答案 2 :(得分: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));

答案 3 :(得分: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') {
searchForProp(lookingFor, obj[key], arr);
} else {
if (key === 'id') {
arr.push(obj[key]);
}
}
});
return arr;
}
var allIDs = searchForProp('id', obj);
console.log(allIDs);
答案 4 :(得分:0)
我能想到使用lodash最简单的方法:
_(object).map(_.keys).flatten().value();
这当然假设玩家键在对象层次结构中始终处于同一级别。