如何输出一系列独特的项目?

时间:2015-01-11 03:43:42

标签: javascript arrays object

我正在讨论一些在线调查,主题是只有当obj的某个属性是唯一的时才将对象中的元素放入数组中。对于这个例子,属性将是“phoneNumber”,uniquePush()应该起作用的功能,因为它是在网站上找到正确的解决方案。我的问题是输出数组。我想我不太明白返回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);

2 个答案:

答案 0 :(得分:0)

在这种方法中,您可以通过将phoneNumbers数组存储在numbers数组中来跟踪numbers。如果存在该数字,则使用else分支从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);

您可以测试此功能。

a

人员最后会添加一个新对象{{1}},因为它是唯一的。

答案 1 :(得分:-1)

     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;
    }