挑选出在阵列阵列,JSON
问题描述:
可以说我有一个数组:挑选出在阵列阵列,JSON
[{
"id": 1,
"firstName": "Ron",
"surname": "Weasley",
"friends": [2]
}, {
"id": 2,
"firstName": "Harry",
"surname": "Potter",
"friends": [1, 3]
}, {
"id": 3,
"firstName": "hermione",
"surname": "granger",
"friends": [2, 4]
}, {
"id": 4,
"firstName": "Drako",
"surname": "Malfoy",
"friends": [1, 3]
}]
如何过滤它,当我点击“哈利·波特”,它显示名称为“Drako马尔福”作为一个div推荐的朋友(因为他与哈利有两个共同的朋友,又因为德拉科是赫敏和罗恩的朋友)?
答
使用$ .inArray()方法获取“firstName”的名字:“Harry”, “surname”:“Potter”,并使用.each()方法获取值和检查值存在于“friends”中: [2],“朋友”:[2,4],“朋友”:[1,3]
答
我假设如果在陌生人和陌生人之间至少有一个共同的朋友,一位推荐的朋友。否则,你应该能够使用注释来遵循逻辑。
参考文献:Array#filter,Array#forEach
var data = [{
"id": 1,
"firstName": "Ron",
"surname": "Weasley",
"friends": [2]
}, {
"id": 2,
"firstName": "Harry",
"surname": "Potter",
"friends": [1, 3]
}, {
"id": 3,
"firstName": "hermione",
"surname": "granger",
"friends": [2, 4]
}, {
"id": 4,
"firstName": "Drako",
"surname": "Malfoy",
"friends": [1, 3]
}];
function getRecommendedFriend(name) {
var person = data.filter(function(item) {
return (item.firstName + " " + item.surname) == name;
})[0];
var friendsOfPerson = person.friends;
var recommendedFriends = data.filter(function(item) {
// Ignore the person himself.
if(item.id == person.id) {
return false;
} else
// Ignore the friends of the person.
if(friendsOfPerson.includes(item.id)) {
return false;
} else
// Return if the person has at least one common friend.
{
var friendsOfStranger = item.friends;
var hasCommonFriend = false;
friendsOfStranger.forEach(function(friend) {
if(friendsOfPerson.includes(friend)){
hasCommonFriend = true;
}
});
return hasCommonFriend;
}
});
return recommendedFriends;
}
console.log(getRecommendedFriend("Harry Potter"));
能否请你添加你目前的代码? – Joe
用户javascript数组排序方法(https://www.w3schools.com/jsref/jsref_sort.asp),这里有一个版本,您可以传递自己的回调函数,因为您可以比较对象并检查字段然后根据结果返回-1,1或0。 – SPlatten
你有什么尝试?如果德拉科和哈利只有一个共同的朋友呢?如果他们都是朋友呢? – Weedoze