有人可以帮我解决这个问题吗,我刚接触javaScript并且陷入了这一点。我在我的数组中输出了某个对象,该输出正在写一个人值,在该对象内(Osoba)有一个数组他的朋友和里面的所有价值观都是每个人的身份证,http://prntscr.com/i9m2ti我如何将朋友数组的ID(在对象内)作为该人的名字和姓氏,其中id在数组中,当时我想输出一个特定的对象,所以会有朋友[他们的名字而不是ID],有人可以写下我怎么能这样做。感谢您的理解。
docker-compose up
答案 0 :(得分:1)
假设json是一个数组且包含所有人,您可以映射到friends数组,并找到具有该ID的人:person['friends'].map(
和json.find(function(person){person.id===friendId});
。
然后返回一个包含该人的名字和姓氏的对象:
console.log("json is:",JSON.stringify(json,undefined,3));
var friends = person['friends'].map(
function(friendId){
console.log("friendID is:",friendId);
var friend = json.find(function(person){return person.id===friendId;});
console.log("friend is:",JSON.stringify(friend,undefined,2));
return {
firstName:friend.firstName,
surname:friend.surname
}
}
);
现在,如果"不起作用"你能否指出日志的输出,任何错误和预期结果与实际结果?
更新完整代码
由于json
是你的所有数据,你可以将它传递给你的Osoba构造函数。朋友getter将使用这些数据创建一个数组Osaba项目,这些项目将拥有数据和朋友,将创建一个Osaba阵列......
class Osoba {
constructor(id, firstName, surname, age, gender, friends, data) {//added data
this._id = id;
this._firstName = firstName;
this._surname = surname;
this._age = age;
this._gender = gender;
this._friends = friends;
this._data = data;//data has all the people
}
get id() {
return this._id;
}
set id(id) {
this._id = id;
}
get firstName() {
return this._firstName;
}
set firstName(firstName) {
this._firstName = firstName;
}
get surname() {
return this._surname;
}
set surname(surname) {
this._surname = surname;
}
get age() {
return this._age;
}
set age(age) {
this._age = age;
}
get gender() {
return this._gender;
}
set gender(gender) {
this._gender = gender;
}
//modified friends getter returning an array of Osoba items
get friends() {
var me = this;
return this._friends.map(
function (friendId) {
var friend = me._data.find(function (person) { return person.id === friendId; });
return new Osoba(
friend.id,
friend.firstName,
friend.surname,
friend.age,
friend.gender,
friend.friends,
me._data
);
}
);
}
set friends(friends) {
this._friends = friends;
}
}
$.getJSON('https://raw.githubusercontent.com/Steffzz/damnz/master/data.json')
.then(
json => {
var people = json.map(
person =>
new Osoba(
person.id,
person.firstName,
person.surname,
person.age,
person.gender,
person.friends,
json
)
);
//you can keep getting friends now, because Osoba is
// creating new Osoba objects based on id's and data you pass in
console.log(people[0].friends[0].friends[0].friends[0]);
}
);
答案 1 :(得分:0)
如果我理解正确,你只想使用id作为id,firstname和lastname。所以只传递id 3次而不是firstname和lastname:
var x = new Osoba(id,id,id,age,gender,friends);
~~~~
好的,你想要的实际上是每个朋友对象中的id属性是朋友的名字和姓氏,而不是想法代码。所以它基本上与我之前建议的相反。你所要做的就是操纵你推送到id的内容。它没有义务成为json的身份。
所以在你的情况下:
for(person of json){
var id = person['firstName'] + "" + person['surname']; // line to change.
var firstName = person['firstName'] ;
var surname = person['surname'] ;
var age = person['age'] ;
var gender= person['gender'] ;
var friends = person['friends'] ;
var x = new Osoba(id,firstName,surname,age,gender,friends);
osobe.push(x); //filling array with objects and their values
}
答案 2 :(得分:0)
而不是
var friends = person['friends'] ;
尝试
var friends = [];
var friendIDs = person['friends'] ; //retrieve friendIDs
for(friendID of friendIDs) { //loop over friendIDs
var friend = json[friendID]; //get friend dataset out of the json
friends.push(friend['firstName']); // add friend dataset to friends array
}
我在这里假设那些朋友也在那个json中。并且id表示该数组中的索引。如果索引不是那些id那么这将不起作用。如果是这样,我可以随意评论,我会编辑我的答案。