2013-08-08 4 views
0

Я заполняю массив объектами. Я хочу проверить, существует ли объект с определенным id.изменить объект, если существует

Если объект существует, замените value на объект.

Например:

function art(id,value) 
{ 
    this.id=id; 
    this.value=value; 
} 

Массив var my_array=[];

Добавление в массив my_array.push(art);

Как проверить, если объект уже существует, а затем заменить его новым значением.

+0

посмотреть, может ли функция jQuery [inArray] (http://api.jquery.com/jQuery.inArray/) решить вашу проблему – Daniele

+0

@ user123_456, если какой-либо из нижеприведенных ответов решить вашу проблему, возможно, стоит отметить ее как ваш ответ, она может помочь другим в будущем: D –

ответ

1

Вы должны использовать ключ типа пары ассоциативный массив, то вам не нужно даже убедитесь, что он существует, потому что:

  1. Если он не существует, он будет создан.
  2. если он существует, он будет перезаписан.

пример:

var my_array = new Array(); 

function art(id,value) 
{ 
    this.id=id; 
    this.value=value; 
} 

var myArt = new art(1,'value');  

//if an array item with this id exists it will be overidden else a new 
//array item will be created 
my_array[myArt.id] = myArt; 

ОБНОВЛЕНО ДЛЯ CLARITY

+0

что делать, если я не хочу создавать k/v-pair, если ключ не существует, а вместо этого просто игнорирует его? –

1

Вы хотите что-то вроде этого: -

for (var i = 0; i < my_array.length; i++) { 
    if(my_array[i].id=="SOMEID") 
     my_array[i].value="NEWValue"; 

} 
0

Вы можете использовать Object для этого:

var my_array = {}; 

function art(id, value) 
{ 
    this.id = id; 
    this.value = value; 
} 

// test 1: 
var newArt1 = new art(1, "value"); 
if(typeof my_array[newArt1.id] === "undefined"){ // check if id 1 exists in object; 
    my_array[newArt1.id] = newArt1.value; 
} 

// test 2: 
var newArt2 = new art("xxx", "value"); 
if(typeof my_array[newArt2.id] === "undefined"){ // check if id xxx exists in object; 
    my_array[newArt2.id] = newArt2.value; 
} 
+1

при проверке свойства/ключа в ob ject вам не нужно 'typeof', просто выполните' if (my_array [newArt1.id]) ' – metadings

+2

@metadings Это работает только в том случае, если значение является правдивым. Если значение false ('undefined',' null', '0',' "", 'NaN'), ваша идея не работает. Способ проверки существования в объекте - это 'in' или' hasOwnProperty'. Чтобы проверить, не является ли это 'undefined', просто используйте'! == undefined' – Ian

0

Пожалуйста, смотрите пример ниже:

var my_array = []; 

function art(id, value) { 
    this.id = id; 
    this.value = value; 
} 

function checkIfExistsAndReplace(inArr, object, newValue) { 
    for (i = 0; i < inArr.length; i++) { 
     if (inArr[i].id == object.id && inArr[i].value == object.value) { 
      inArr[i].value = newValue; 
      return inArr; 
     } 
    } 
    return false; 
} 

for (var i = 0; i < 5; i++) { 
    my_array.push(new art("name", i)); 
} 

console.log(my_array); 

console.log(checkIfExistsAndReplace(my_array, new art('name', 4), 'NEWVALUE')); 

console.log(checkIfExistsAndReplace(my_array, new art('name', 5))); 

Смотрите также скрипку ниже

JSFiddle

1

Я не уверен, что вы ищете, но если вы хотите, чтобы проверить объект на определенный идентификатор и заменить его значение, чем я думаю

for(var i = 0; i < my_array.length; i++){ 
     if(my_array[i].id === "#123"){ 
     my_array[i].value = "Some New Value to it" 
     } 
    } 

PS: всегда сверяться с === стараются избегать ==, as == имеет неожиданное поведение

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