Как создать массив литералов объектов в цикле?

Я погуглил, чтобы код объединил свойства объектов и закончился здесь. Однако с тех пор не было никакого кода для рекурсивного слияния, которое я записал этому сам. (Возможно, jQuery расширяется, рекурсивный BTW?) Во всяком случае надо надеяться, кто-то еще найдет это полезным также.

(Теперь код не использует Object.prototype :)

Код

/*
* Recursively merge properties of two objects 
*/
function MergeRecursive(obj1, obj2) {

  for (var p in obj2) {
    try {
      // Property in destination object set; update its value.
      if ( obj2[p].constructor==Object ) {
        obj1[p] = MergeRecursive(obj1[p], obj2[p]);

      } else {
        obj1[p] = obj2[p];

      }

    } catch(e) {
      // Property in destination object not set; create it and set its value.
      obj1[p] = obj2[p];

    }
  }

  return obj1;
}

, пример

o1 = {  a : 1,
        b : 2,
        c : {
          ca : 1,
          cb : 2,
          cc : {
            cca : 100,
            ccb : 200 } } };

o2 = {  a : 10,
        c : {
          ca : 10,
          cb : 20, 
          cc : {
            cca : 101,
            ccb : 202 } } };

o3 = MergeRecursive(o1, o2);

Производит объект o3 как

o3 = {  a : 10,
        b : 2,
        c : {
          ca : 10,
          cb : 20,
          cc : { 
            cca : 101,
            ccb : 202 } } };
216
задан Ahmed Ashour 30 December 2017 в 11:27
поделиться

4 ответа

var arr = [];
var len = oFullResponse.results.length;
for (var i = 0; i < len; i++) {
    arr.push({
        key: oFullResponse.results[i].label,
        sortable: true,
        resizeable: true
    });
}
380
ответ дан 23 November 2019 в 04:18
поделиться

Ответ RaYell хорош - он отвечает на ваш вопрос.

Мне кажется, что вы действительно должны создавать объект, помеченный метками с подобъектами в качестве значений:

var columns = {};
for (var i = 0; i < oFullResponse.results.length; i++) {
    var key = oFullResponse.results[i].label;
    columns[key] = {
        sortable: true,
        resizeable: true
    };
}

// Now you can access column info like this. 
columns['notes'].resizeable;

описанный выше подход должен быть намного быстрее и идиоматичнее, чем поиск ключа во всем массиве объектов для каждого доступа.

60
ответ дан 23 November 2019 в 04:18
поделиться

Я бы создал массив, а затем добавил к нему объектные литералы.

var myColumnDefs = [];

for ( var i=0 ; i < oFullResponse.results.length; i++) {

    console.log(oFullResponse.results[i].label);
    myColumnDefs[myColumnDefs.length] = {key:oFullResponse.results[i].label, sortable:true, resizeable:true};
}
3
ответ дан 23 November 2019 в 04:18
поделиться
var myColumnDefs = new Array();

for (var i = 0; i < oFullResponse.results.length; i++) {
    myColumnDefs.push({key:oFullResponse.results[i].label, sortable:true, resizeable:true});
}
2
ответ дан 23 November 2019 в 04:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: