如何输出一组独特的项目?

How to output an array of unique items?

我正在浏览一些在线教程,主题是仅当对象的某个 属性 是唯一的时才将对象中的元素放入数组中。对于此示例,属性 将是 "phoneNumber" 执行该操作的功能 uniquePush() 应该可以工作,因为它在网站上提供了正确的解决方案。我的问题是输出数组。我想我不太明白 return true 或 return false 的东西在输出结果方面是如何工作的。我知道 true 和 false 是布尔值。我相信我尝试过

if(uniquePush(nameArr, person){
 then out put the obj.name
}

但这没有用

这里是 tuts 的例子。

var person = {
        name:'bob', phoneNumber:1234,
        name:'joe', phoneNumber:123,
        name:'jack', phoneNumber:456,
        name:'duped1', phoneNumber:2345,
        name:'duped2', phoneNumber:2345
    }
    var nameArr =[];

    function uniquePush(arr, obj) {
      if(! ('phoneNumber' in obj)) {
        return false;
      }

      var unique = true;
      arr.forEach(function(element) {
        if(element.phoneNumber === obj.phoneNumber) {
          unique = false;
        }
      });

      if(unique) {
        arr.push(obj);
        return true;
      }
      return false;
    }

我只想弹出一个警告框,列出唯一的名称,例如 [bob、joe、jack],而不是 duped1 或 duped 2

我想通过做这样的事情来做到这一点

uniquePush(nameArr, person);
alert(nameArr.name);
     var person = [
           { name: 'bob', phoneNumber: 1234 },
    { name: 'joe', phoneNumber: 123 },
    { name: 'jack', phoneNumber: 456 },
    { name: 'duped1', phoneNumber: 2345 },
    { name: 'duped2', phoneNumber: 2345 }
    ];



    function uniquePush(arr, obj) {
        if (!('phoneNumber' in obj)) {
            return false;
        }

        var unique = true;
        arr.forEach(function (element) {
            if (element.phoneNumber === obj.phoneNumber) {
                unique = false;
            }
        });

        if (unique) {
            arr.push(obj);
            return true;
        }
        return false;
    }

在这种方法中,如果它们不存在,您可以通过将它们存储在 numbers 数组中来跟踪 phoneNumbers。如果数字存在,则使用 else 分支从 numbers 数组中删除之前出现的相同数字。

var person = [
    { name: 'bob', phoneNumber: 1234 },
    { name: 'joe', phoneNumber: 123 },
    { name: 'jack', phoneNumber: 456 },
    { name: 'duped1', phoneNumber: 2345 },
    { name: 'duped2', phoneNumber: 2345 }
];

names = [];
numbers = [];

person.forEach(function(e){
    if(!(numbers.indexOf(e.phoneNumber) > -1)){
        numbers.push(e.phoneNumber);
        names.push(e.name);
    }else{
        numbers.splice(numbers.indexOf(e.phoneNumber), 1) 
        names.splice(numbers.indexOf(e.phoneNumber), 1);    
    }
});
console.log(names);

更新 :

function uniquePush(arr, obj) {
    if(obj.phoneNumber === 'undefined') return false;
    unique = true;
    arr.forEach(function(e){
        if(e.phoneNumber === obj.phoneNumber){
            console.log('Nah');
            unique = false;
        }
    });
    if(unique){    
        arr.push(obj);
        console.log('Yep');
    }
}

您可以测试这个功能。

a = { name: "nodup", phoneNumber: 235 };
uniquePush(person,a);
console.log(person);

Person 将最后添加一个新对象 a,因为它是独一无二的。