Javascript对象列表。取一个名字和一个列表,然后返回所有名称等功能列表

时间:2017-04-03 03:23:12

标签: javascript object

我一直在试图弄清楚这个函数的最佳代码是什么,但是我尝试过的代码不起作用。

以下是说明。

  • 应该使用姓名和人员列表,并返回所有非朋友姓名的列表“,如果在朋友列表中返回false,则函数使用isFriends irrirate每个对象

    var data = [
      {name: "Jimmy", friends:["Sara", "Liza"]},
      {name: "Bob", friends:[]},
      {name: "Liza", friends: ["Jimmy"]},
      {name: "Sara", friends: ["Jimmy"]}
    ];
    
    assert.deepEqual(nonFriends("Jimmy", data), ["Bob"]);
    assert.deepEqual(nonFriends("Bob", data), ["Jimmy", "Liza", "Sara"]);
    assert.deepEqual(nonFriends("Sara", data), ["Bob","Liza"]);
    

这是我的isFriends功能代码

  • isFriend():如果是朋友,则应该使用名称和对象并返回true,否则返回“

    function isFriend(name, obj) {
      if(Array.isArray(obj.friends) && obj.hasOwnProperty("friends")) {
        for(var i = 0; i < obj.friends.length; i++) {
          if(name === obj.friends[i]) {
            return true;  
          }
        }    
      }  
     return false;   
    } 
    

如何创建一个nonFriend函数,如实现isFriend函数所描述的。你能详细解释一下吗?我对其他陈述等没有信心,谢谢你

1 个答案:

答案 0 :(得分:0)

nonFirends()方法包括以下事项:

  1. 提取所有人的姓名。
  2. 查找输入名称是否为列表中的名称,如果不是,则表示所有人都不是朋友。
  3. 将目标对象的好友列表与完整列表进行比较 名。
  4. 以下代码应该有效。

    function nonFriends(name, arr){
        var nameList = [];
        var result = [];
        var current = null;
        for(var i=0; i<arr.length; i++){
            if(name === arr[i].name){
                current = arr[i];
            }else{
                nameList.push(arr[i].name);
            }
        }
    
        if(current === null){
            return nameList;
        }
    
        for(var i=0; i<nameList.length; i++){
            if(current.friends.indexOf(nameList[i]) == -1){
                result.push(nameList[i]);
            }
        }
    
        return result;
    
    }