Добавить новый объект в многомерный массив - PullRequest
0 голосов
/ 15 января 2019

У меня есть массив объектов JavaScript, как показано ниже.

var satelliteListByGroup = {
    Default: {
        AccessCX1141016091532: {
            name: "IAD_ACS4",
            iname: "IAD_ACS4_core0",
            ra: "[Not assigned]",
            ip: "1.1.1.1",
            status: "Permitted, last connected Jan 14, 2019 10:19:12 AM",
            col: "#ff5555",
            fw: "5.0.0.31",
            srv: "Enabled"
        },
        AccessCX1180424080022: {
            name: "IAD_ACS4",
            iname: "IAD_ACS4_core0",
            ra: "[Not assigned]",
            ip: "1.1.1.1",
            status: "Permitted, last connected Jan 14, 2019 10:19:12 AM",
            col: "#ff5555",
            fw: "5.0.0.31",
            srv: "Enabled"
        }
    }
};

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

var arr1 = {
            AccessCX11410160916546: {
                name: "IAD_ACS4",
                iname: "IAD_ACS4_core0",
                ra: "[Not assigned]",
                ip: "5.5.5.5",
                status: "Permitted, last connected Jan 14, 2019 10:19:12 AM",
                col: "#ff5555",
                fw: "5.0.0.31",
                srv: "Enabled"
            }
        };
        satelliteListByGroup.Default.push(arr1);

В этом случае push недопустимо. Кажется, он работает только с именем основного массива.

Ответы [ 3 ]

0 голосов
/ 15 января 2019

push не является допустимым синтаксисом для добавления нового ключа к объекту. В вашем случае arr1 это объект. Поэтому используйте Object.keys для получения ключа и Object.values для получения ключа и значений из arr1 объекта. Оба Object.keys и Object.values ​​возвращают массив. Поскольку arr1 содержит только одно значение, вы можете получить к нему доступ с помощью индекса.

Затем используйте квадратную скобку, чтобы создать ключ внутри Default объекта

var satelliteListByGroup = {
  Default: {
    AccessCX1141016091532: {
      name: "IAD_ACS4",
      iname: "IAD_ACS4_core0",
      ra: "[Not assigned]",
      ip: "1.1.1.1",
      status: "Permitted, last connected Jan 14, 2019 10:19:12 AM",
      col: "#ff5555",
      fw: "5.0.0.31",
      srv: "Enabled"
    },
    AccessCX1180424080022: {
      name: "IAD_ACS4",
      iname: "IAD_ACS4_core0",
      ra: "[Not assigned]",
      ip: "1.1.1.1",
      status: "Permitted, last connected Jan 14, 2019 10:19:12 AM",
      col: "#ff5555",
      fw: "5.0.0.31",
      srv: "Enabled"
    }
  }
};

var arr1 = {
  AccessCX11410160916546: {
    name: "IAD_ACS4",
    iname: "IAD_ACS4_core0",
    ra: "[Not assigned]",
    ip: "5.5.5.5",
    status: "Permitted, last connected Jan 14, 2019 10:19:12 AM",
    col: "#ff5555",
    fw: "5.0.0.31",
    srv: "Enabled"
  }
};
let getKey = Object.keys(arr1);
let getVals = Object.values(arr1);

satelliteListByGroup.Default[getKey[0]] = getVals[0]
console.log(satelliteListByGroup)
0 голосов
/ 15 января 2019

Вы устанавливаете свойство объекта, а не помещаете элемент в массив. Попробуйте это -

    obj  ={
       'AccessCX11410160916546':{
        name: "IAD_ACS4",
        iname: "IAD_ACS4_core0",
        ra: "[Not assigned]",
        ip: "5.5.5.5",
        status: "Permitted, last connected Jan 14, 2019 10:19:12 AM",
        col: "#ff5555",
        fw: "5.0.0.31",
        srv: "Enabled"
    },
   'AccessCX114101890900-':{
        name: "IAD_ACS6",
        iname: "IAD_ACS4_core2",
        ra: "[Not assigned]",
        ip: "5.5.5.5",
        status: "Permitted, last connected Jan 14, 2019 10:19:12 AM",
        col: "#ff5555",
        fw: "5.0.0.31",
        srv: "Enabled"
    },

   }
for(let key in obj){
 satelliteListByGroup.Default[key]= obj[key];
}
0 голосов
/ 15 января 2019

push() - это метод массива, но Default - это не массив, это объект. Вы можете использовать Object.assign():

Метод Object.assign() используется для копирования значений всех перечисляемых собственных свойств из одного или нескольких исходных объектов в целевой объект. Он вернет целевой объект.

var satelliteListByGroup = {
    Default: {
        AccessCX1141016091532: {
            name: "IAD_ACS4",
            iname: "IAD_ACS4_core0",
            ra: "[Not assigned]",
            ip: "1.1.1.1",
            status: "Permitted, last connected Jan 14, 2019 10:19:12 AM",
            col: "#ff5555",
            fw: "5.0.0.31",
            srv: "Enabled"
        },
        AccessCX1180424080022: {
            name: "IAD_ACS4",
            iname: "IAD_ACS4_core0",
            ra: "[Not assigned]",
            ip: "1.1.1.1",
            status: "Permitted, last connected Jan 14, 2019 10:19:12 AM",
            col: "#ff5555",
            fw: "5.0.0.31",
            srv: "Enabled"
        }
    }
};

var arr1 = {
            AccessCX11410160916546: {
                name: "IAD_ACS4",
                iname: "IAD_ACS4_core0",
                ra: "[Not assigned]",
                ip: "5.5.5.5",
                status: "Permitted, last connected Jan 14, 2019 10:19:12 AM",
                col: "#ff5555",
                fw: "5.0.0.31",
                srv: "Enabled"
            }
        };
Object.assign(satelliteListByGroup.Default, arr1);
console.log(satelliteListByGroup);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...