我有下一个目标:
var persons= {};
persons["Matt"].push("A");
persons["Matt"].push("B");
persons["Matt"].push("C");
我想知道对象是否包含我尝试插入的元素。
E.g:
persons["Matt"].push("A"); /* The element A already exist... And I don't want duplicate elements.*/
有人知道一种方法吗?
更详细的编辑:
我有下一个代码:
function insertIfNotThere(array, item) {
if (array.indexOf(item) === -1) {
array.push(item);
}
}
function EventManager(target) {
var target = target || window, events = {};
this.observe = function(eventName, cb) {
if (events[eventName]){
insertIfNotThere(events[eventName], cb);
}else{
events[eventName] = []; events[eventName].push(cb);
}
return target;
};
this.fire = function(eventName) {
if (!events[eventName]) return false;
for (var i = 0; i < events[eventName].length; i++) {
events[eventName][i].apply(target, Array.prototype.slice.call(arguments, 1));
}
};
}
我使用您的方法检查是否存在指示内容的元素。但是......它推动了元素......我不知道发生了什么......
答案 0 :(得分:3)
首先要做的事情。当你这样做
persons= {};
您正在创建一个名为persons
的全局属性,并为其指定一个空对象。你可能想要一个局部变量。所以,将其改为
var persons = {};
然后,当您在对象中创建新密钥时,默认情况下,该值将为undefined
。在您的情况下,您需要存储一个数组。所以,你必须像这样初始化它
persons['Matt'] = [];
然后你可以使用Array.prototype.indexOf
函数来确定所添加的项目是否已经存在于数组中(如果在数组中找不到该项,则返回-1
),像这样
if (persons['Matt'].indexOf("A") === -1) {
persons['Matt'].push("A");
}
if (persons['Matt'].indexOf("B") === -1) {
persons['Matt'].push("B");
}
您可以创建一个功能来执行此操作
function insertIfNotThere(array, item) {
if (array.indexOf(item) === -1) {
array.push(item);
}
}
var persons = {};
persons['Matt'] = [];
insertIfNotThere(persons['Matt'], 'A');
insertIfNotThere(persons['Matt'], 'B');
// This will be ignored, as `A` is already there in the array
insertIfNotThere(persons['Matt'], 'A');
答案 1 :(得分:1)
使用indexOf
检查是否存在A.如果它不存在(为-1),请将其添加到数组中:
if (persons['Matt'].indexOf('A') === -1) {
persons['Matt'].push('A');
}