JS检查对象的值是否存在

时间:2016-02-05 04:50:11

标签: javascript

所以,我有以下js设置:

var NAMES = []; 
function INFO(id,first,middle,last){ 
  var newMap = {};
  newMap[id] = [first, middle, last];
  return newMap ;   
}

然后,

for (var j = 0; j < NUMBER.length; j++) {   //let say it there are three values
    var my_name = all_names[j]; // has "185, 185, 185"              
    if (NAMES[my_name] !== 185){ //Needs to check here              
        NAMES.push(INFO(my_name,"sean","sdfsd","sdfsfd"));                      
    }else{

    }               
}
alert(JSON.stringify(NAMES , null, 4));

以下是警报的屏幕截图:

enter image description here

我为这个例子硬编码了“185”。我需要检查id of 185是否存在,然后跳到else。我不知道如何检查它。我尝试了typeofundefined等。但没有运气。 (换句话说,我应该只有一个“185”)。

有任何帮助吗?谢谢!

4 个答案:

答案 0 :(得分:1)

如果我理解你想要实现的目标,你必须遍历NAMES并检查每个元素。例如,您可以使用[].some javascript函数执行此操作:

if (!NAMES.some(function(v){return v[my_name]})) {
    ...
} else {

}

答案 1 :(得分:1)

如果你想删除重复,可以使用NAMES作为对象而不是像这样的数组

var all_names = [185, 185, 181], 
    NAMES = {};
for (var j = 0; j < all_names.length; j++) {   //let say it there are three values
    var my_name = all_names[j]; // has "185, 185, 185"  
    NAMES[my_name] = ["sean","sdfsd","sdfsfd"];
}

alert(JSON.stringify(NAMES, null, 4));

答案 2 :(得分:1)

首先,我建议制作一个JS Fiddle或CodePen,这样人们就可以看到代码正在运行。

我认为问题是NAMES[my_name]没有按照你的想法行事。 NAMES是一个数组,因此当您说NAMES[my_name]时,您确实要求数组中的ITEM,这样您就可以获得在INFO函数中创建的整个对象。您真正想要的是查看对象是否具有与值匹配的属性(例如,来自my_names数组的“185”)。

这不是最漂亮的代码,但它会告诉你如何做你真正想做的事情:

var NAMES = []; 
function INFO(id,first,middle,last){ 
  var newMap = {};
  newMap[id] = [first, middle, last];
  return newMap ;   
}

all_names = ["185", "186", "185"]

for (var j = 0; j < all_names.length; j++) {
    var my_name = all_names[j]; 
    if (NAMES.length == 0) {
        NAMES.push(INFO(my_name,"sean","sdfsd","sdfsfd"));                      
    } else {
        var match = false;
        for (var x = 0; x < NAMES.length; x++) {
            console.log(NAMES[x][my_name] + ' : ' + my_name);
            if(NAMES[x][my_name]) {
                match = true;
            } 
        }
        if (!match) {
            NAMES.push(INFO(my_name,"sean","sdfsd","sdfsfd"));
        }
    }
}
alert(JSON.stringify(NAMES , null, 4));

请注意,如果查看NAMES[x][my_name],则会询问数组索引“x”处的项是否具有“my_name”属性(例如“185”)。我相信这正是你想要做的。午夜之后,我向你保证,有更简洁,漂亮的JS可以做到这一点,但这应该向你展示你必须解决的基本问题。

答案 3 :(得分:0)

使用hasOwnProperty方法尝试此代码:

for (var j = 0; j < NUMBER.length; j++) {   //let say it there are three values
    var my_name = all_names[j]; // has "185, 185, 185"    
    if (!NAMES[my_name].hasOwnProperty("185")){ //Needs to check here              
        NAMES.push(INFO(my_name,"sean","sdfsd","sdfsfd"));                      
    }else{

    }               
}