2016-07-27 2 views
4

У меня есть простая функция:Как добавить новую пару ключ значение в существующий объект

function pagination(opt, limit){ 
    console.log(opt); 
    //logs out this-> [Object { limit="2", layout="getConversations"}] 

    if (typeof opt === 'object') { 
     var list = { 
      data: [opt] 
     } 
     list.data['limitstart'] = 24; //undefined 
     console.debug(data); //here it should list three key value pairs including limitstart which just added 
    } 
} 

Я попытался это:

list.data.push({ 'limitstart': 24 }); //creates another object. 

ожидается выход:

[Object { limit="2", layout="getConversations", limitstart=24}] 

ответ

1

Вы можете установить это как строка, как в вашем примере, но когда вы помещаете объект в массив с [obj], вам нужно выбрать индекс 0 тоже:

list.data[0]["limitstart"] = 24; 

Или вы можете сделать это как свойство:

list.data[0].limitstart = 24; 

Working example.

Для вашего exprected выход вы не должны ставить obj в массиве:

var obj = {limit: '2', layout: 'getConversations'}; 
var list = {data: obj}; 

list.data.limitstart = 24; 
console.debug(list.data); // you have to log 'list.data' not 'data' 
+0

это работает, не могли бы вы объяснить, , зачем использовать [0]? – 112233

+0

Потому что вы помещаете 'obj' внутри массива с помощью' [obj] '(* the' [] 'around сделает это *). Поскольку 'obj' - первая запись в этом новом массиве, вы должны выбрать' obj' по индексу '0'. @Keren – eisbehr

1

Чтобы получить выход, как вам требуется не нужно размещать opt в массив, вам просто нужно добавить свойство к нему, как это:

function pagination(opt, limit) { 
 
    console.log('input', opt); 
 

 
    if (typeof opt === 'object') { 
 
    opt.limitstart = 24; // add the property here 
 
    } 
 

 
    console.log('output', opt); 
 
} 
 

 
pagination({ 
 
    limit: '2', 
 
    layout: 'getConversations' 
 
});

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