JavaScript-按键搜索对象属性并将其值添加到数组中
假设我有一个这样的物体:JavaScript-按键搜索对象属性并将其值添加到数组中,javascript,arrays,lodash,Javascript,Arrays,Lodash,假设我有一个这样的物体: 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":
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
的对象键中时添加该值,并将该值添加到数组中。基本上,使用Javascript在单个数组中获取所有玩家id,要遍历键并获取每个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);
遍历对象键,检查字符串是否以“player-”开头,然后将最后四个字符放入空数组
var对象={
“辩护人”:{
“玩家-1868”:{
“出生日期”:“1996年7月1日”,
“俱乐部国家”:“智商”,
“俱乐部id”:171,
“俱乐部名称”:“埃尔比勒”,
“名字”:“Burhan Jumaah”,
“id”:1868年,
“联盟id”:12,
“联赛名称”:“伊拉克超级联赛”,
“名称”:“Burhan Jumaah”,
“国籍”:“智商”,
“国籍完整”:“伊拉克”,
“位置”:“防御者”,
“姓氏”:“拉扎克”,
“投票”:[
“Y884F42MLCVDL5V5CMERPL11GJ2”
]
}
},
“守门员”:{
“播放器-3076”:{
“出生日期”:“1985年12月15日”,
“俱乐部国家”:“QA”,
“俱乐部id”:1,
“俱乐部名称”:“Lekhwiya”,
“评论”:[{
“评论”:“xxx”,
“姓名”:“guy tester”,
“photoURL”:http://pbs.twimg.com/profile_images/855450315704979460/RGiq07D7_normal.jpg",
“时间”:1496529030321,
“用户”:“Y884F42MLCVDL5V5CMERPL11GJ2”
}],
“名字”:“Qasem Abdulhamed”,
“id”:3076,
“联盟id”:1,
“联赛名称”:“卡塔尔明星联赛”,
“名称”:“Qasem Burhan”,
“国籍”:“qa”,
“国籍完整”:“卡塔尔”,
“位置”:“守门员”,
“姓”:“布汗”,
“投票”:[
“Y884F42MLCVDL5V5CMERPL11GJ2”
]
},
“玩家-3532”:{
“出生日期”:“1992年4月2日”,
“俱乐部国家”:“SA”,
“俱乐部id”:18,
“俱乐部名称”:“Al Ittihad”,
“名字”:“法瓦兹”,
“id”:3532,
“联盟id”:2,
“联盟名称”:“沙特职业联盟”,
“姓名”:“法瓦兹·阿尔卡尼”,
“国籍”:“sa”,
“国籍完整”:“沙特阿拉伯”,
“位置”:“守门员”,
“姓氏”:“阿尔卡尼”,
“投票”:[
“Y884F42MLCVDL5V5CMERPL11GJ2”
]
}
}
};
函数getPlayers(对象){
设项目=[];
for(让我输入对象){
设key=Object.key(Object[i]);
key.forEach(i=>i.startsWith('player')?items.push(i.substring(i.length-4)):“”);
}
退货项目;
}
log(getPlayers(object))
您可以在对象的键上递归地Array#reduce
以查找搜索字符串(player-),并创建和提取值:
var object={“Defender”:{“player-1868”:{“生日”:“1996年7月1日”,“club_country”:“IQ”,“club_id”:171,“club_name”:“Erbil”,“forename”:“Burhan Jumaah”,“id”:1868,“league_id”:12,“league_name”:“伊拉克超级联赛”,“姓名”:“Burhan Jumaah”,“国籍”:“IQ”,“国籍”:“伊拉克”,“职位”:“Defender”,“姓氏”:“Razzaq”,“选票”:”[“Y884F42MLCVDL5V5CMERPL11GJ2”},“守门员”:{“球员-3076”:{“生日”:“1985年12月15日”,“俱乐部国家”:“QA”,“俱乐部id”:1,“俱乐部名称”:“Lekhwiya”,“评论”:[{“评论”:“xxx”,“姓名”:“guy tester”,“照片URL”:”http://pbs.twimg.com/profile_images/855450315704979460/RGiq07D7_normal.jpg“,“时间”:1496529030321,“用户”:“y884F42mLCVdld5V5cMeRpl11gJ2”}”名字“:“Qasem Abdulhamed”,“id:”3076,“league_id:”1,“league_name:”卡塔尔明星联赛“,”姓名“:”Qasem Burhan“,”国籍“,”qa“,”国籍“,”完全“,”卡塔尔“,”职位“,”守门员“,”姓氏“:”Burhan“,”投票“:”,”球员-3532:“{”出生日期“,”1992年4月2日“,”俱乐部国家“,”SA“,”俱乐部id:”18,“俱乐部名称“:”Al Ittihad“,”姓名:“法瓦兹”,“id”:3532,“联赛id”:2,“联赛名称”:“沙特职业联赛”,“姓名”:“法瓦兹·阿尔卡尼”,“国籍”:“sa”,“国籍完整”:“沙特阿拉伯”,“职位”:“守门员”,“姓氏”:“阿尔卡尼”,“投票”:[“Y884F42MLCVDL5V5CMERPL11GJ2”];
函数searchProps(searchStr,object){
return Object.keys(Object).reduce(函数(arr,key){//将对象的键还原为数组
key.indexOf(searchStr)==-1 | | arr.push(key.slice(searchStr.length));//如果一个键包含搜索字符串,则取它后面的任何内容
var propValue=对象[键];
如果(typeof-propValue=='object'&&propValue!==null){//如果属性的值是数组,则通过搜索道具运行它
返回arr.concat(searchProps(searchStr,propValue));
}
返回arr;
}, []);
}
var result=searchProps('player-',object);
console.log(result);
经过一段时间的研究,我自己就能够解决这个问题了
var obj={
辩护人:{
“玩家-1868”:{
俱乐部id:171,
id:1868,
联盟编号:12,
姓名:“Burhan Jumaah”
}
},
守门员:{
“播放器-3076”:{
俱乐部编号:1,
身份证号码:3076,
联盟编号:1,
名称:“Qasem Burhan”
},
“玩家-3532”:{
俱乐部编号:18,
身份证号码:3532,
联盟编号:2,
名称:“法瓦兹·卡尼”
}
}
};
函数searchForProp(查找、对象、属性){
var arr=arr收益率?arr收益率:[];
Object.key(obj).forEach(函数(key,idx){
if(类型(对象[键])==“对象”){
searchForProp(查找,obj[key],arr);
}否则{
如果(键=='id'){
arr.push(对象[键]);
}
}
});
返回arr;
}
var allIDs=searchForProp('id',obj);
console.log(allIDs);
我能想到的使用lodash的最简单方法:
_(object).map(_.keys).flatten().value();
当然,这假设播放器键在对象层次结构中始终处于同一级别。是预期结果[1868,3076,3532]
?您是否可以包含您试图解决问题的javascript
?因此这不是免费的编码服务。您必须自己尝试解决问题。如果