挑选出在阵列阵列,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推荐的朋友(因为他与哈利有两个共同的朋友,又因为德拉科是赫敏和罗恩的朋友)?

+3

能否请你添加你目前的代码? – Joe

+1

用户javascript数组排序方法(https://www.w3schools.com/jsref/jsref_sort.asp),这里有一个版本,您可以传递自己的回调函数,因为您可以比较对象并检查字段然后根据结果返回-1,1或0。 – SPlatten

+1

你有什么尝试?如果德拉科和哈利只有一个共同的朋友呢?如果他们都是朋友呢? – Weedoze

使用$ .inArray()方法获取“firstName”的名字:“Harry”, “surname”:“Potter”,并使用.each()方法获取值和检查值存在于“friends”中: [2],“朋友”:[2,4],“朋友”:[1,3]

我假设如果在陌生人和陌生人之间至少有一个共同的朋友,一位推荐的朋友。否则,你应该能够使用注释来遵循逻辑。

参考文献:Array#filterArray#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"));