2014-01-07 3 views
0

Я нашел этот код ниже:Любой может объяснить эту структуру данных Javascript?

var this.something = {}; 

var box = {}; 

box.id = X[0]; 
box.name = X[1] 
box.address = X[2]; 

if(!this.something.ids[box.id]){      
    this.something.ids[box.id] = 1; 
    this.something.datas.push(box); 
} 

Как я могу изменить «box.name», который имеет «box.id» = «г» в структуре данных «this.something»?

Кто-нибудь может мне помочь?

Мне нужно ссылаться на «this.something» и редактировать связанный массив «box». Но я не знаю, как это сделать.

Спасибо.

+0

добавить, если условный оператор. – Praveen

+1

Код имеет синтаксические ошибки для начала. –

+0

'something' выглядит пустым, поэтому условие'! This.something.ids [box.id] 'должно завершиться ошибкой. – Stefan

ответ

1

Просто сделать

for(var i = 0; i < this.something.datas.length; i++){ 
    var box = this.something.datas[i]; 
    if(box.id === 'z'){ 
     box.name = "New Name"; 
    } 
} 

Вы можете сделать это в зависимости от курса

var Something = function(){ 
    this.ids = []; 
    this.datas = []; 

    this.addBox = function(X){ 
     var box = {}; 

     box.id = X[0]; 
     box.name = X[1] 
     box.address = X[2]; 

     if(!this.ids[box.id]){      
      this.ids[box.id] = 1; 
      this.datas.push(box); 
     } 
    } 

    this.getBoxById = function(id){ 
     for(var i = 0; i < this.datas.length; i++){ 
      var box = this.datas[i]; 
      if(box.id === id){ 
       return box; 
      } 
     } 
     return undefined; 
    } 
} 

var something = new Something(); 
... 
var box = something.getBoxById('z'); 
if(box){ 
    box.name = "new name"; 
} 
+1

думаю это может сработать. Я думал, что есть более простое решение или любой другой способ. Благодарю. – ewlung

+0

Юп, это работает! Спасибо :) – ewlung

+0

Добро пожаловать, рад помочь! – thomaux

0

, если я получаю то, что вы говорите, должны не только:

if (box.id == "z") box.name = "whatever"; 

быть то, что вы ищете?

+0

Нет, я имел в виду, «ящик», который был нажат на переменную «this.something». – ewlung

+0

Почему бы не проверить его, прежде чем вставлять его в массив? Плюс, возможно, вы должны очистить свой код немного, как и другие. – NewInTheBusiness

1

Во-первых, вы не можете объявлять свойства как переменные: var this.something = {} неверен. Вместо этого используйте this.something = {}.

Что такое X объект? вместо this.something как объекта {} со свойствами как массивы .ids и .datas вы должны использовать this.something как массив [] и просто надавить на свой объект box. то вы можете просто зацикливать свой массив и вносить изменения только в эти элементы, какой идентификатор вы ищете.

//Better use array, not object with 2 properties of arrays for ids and objects. 
this.something = []; 

//Create box object and push to array. 
var box = { 
    id: X[0], 
    name: X[1], 
    address: X[2] 
}; //You also can create object as you did, but this way is short-hand definition of object with custom properties. 

//Push box to array 
this.something.push(box) 

var boxIdToChange = 'abc'; 

// Instant edit when you still have access to your 'box' object. 
if (box.id === boxIdToChange){ 
     //Make your changes to 'elem' object here. 
     elem.name = 'New name'; 
     elem.address = 'Different address than original'; 
} 

// If you want to make changes later, for example after creating multiple box elements. 
for (var i = 0; i<this.something.length;i++){ 
    var elem = this.something[i]; 
    if (elem.id === boxIdToChange){ 
     //Make your changes to 'elem' object here. 
     elem.name = 'New name'; 
     elem.address = 'Different address than original'; 
    } 
} 
+0

Я нашел этот код из сценария, и я хочу его изменить. – ewlung

+0

, если ваш текущий код находится в рабочем состоянии, тогда имейте в виду просто изменить 'this.something' от объекта к массиву, поскольку это может вызвать ошибки в других функциях, которые используют' this.something' как объект. В этом случае вы все равно можете использовать свой объект, но затем в 'for' функцию make loop throw' this.something.datas' array. – Epsil0neR

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