2016-02-05 2 views
0

Итак, я следующий JS установки: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. Я не уверен, как это проверить. Я пробовал typeof, undefined и т. Д., Но не повезло. (Другими словами, у меня должен быть только один «185»).

Любая помощь? Благодаря!

+0

Вы можете создать jsfiddle? – brk

+0

На него следует ссылаться как 'NAMES [0] [" 185 "]', если массив 'NAMES' показан на рисунке. – sabithpocker

+0

'typeof NAMES [my_name]! = 'Undefined'' должен был работать – Nate

ответ

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{ 
 

 
    }    
 
}

+0

не может запустить этот фрагмент. Номер не определен, что очевидно – brk

+0

Можете ли вы предоставить скрипку, чтобы я мог правильно проверить? – BCoder

+0

Невозможно, чтобы этот код делал что-то разумное. 'NAMES [my_name]' полностью не определено. –

1

Если я правильно понял, чего вы пытаетесь достичь, вам нужно перебирать NAMES и проверять каждый элемент. Например, вы могли бы сделать это с помощью [].some Javascript функция:

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

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

Прежде всего, я бы рекомендовал сделать JS Fiddle или CodePen, чтобы люди могли видеть, что код работает.

Я считаю, что проблема в том, что NAMES[my_name] не делает то, что вы думаете. NAMES - это массив, поэтому, когда вы говорите NAMES[my_name], вы действительно просите ITEM в массиве, чтобы получить весь объект, который вы создаете в функции INFO. Вы действительно хотите увидеть, имеет ли объект атрибут, который соответствует значению (например, «185» из массива my_names).

Это не самый красивый код, но он покажет вам, как сделать то, что вы действительно хотите сделать:

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, но это должно показать вам основную проблему, которую вы должны решить.

Смежные вопросы