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
?因此这不是免费的编码服务。您必须自己尝试解决问题。如果