我正在讨论一些在线调查,主题是只有当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);
答案 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;
}