Как вставить объект в массив в javascript? - PullRequest
0 голосов
/ 13 февраля 2020
actions = [{ 'name' : 'Share',
  'icon' : 'fa fa-share-alt library_icon mylibrary-icon-right'
    },{
    'name' : 'Edit',
    'icon' : 'fa fa-pencil-square-o library_icon mylibrary-icon-right'
  },
  {
    'name' : 'Embed',
    'icon' : 'fa fa-link library_icon mylibrary-icon-right'
  },
  {
     'name' : 'Schedule',
     'icon' : 'fa fa-calendar library_icon mylibrary-icon-right'
  }
];

Я должен удалить второй объект и вставить его снова в ту же позицию после прохождения условия. Есть ли способ сделать это?

Ответы [ 5 ]

1 голос
/ 13 февраля 2020

Используйте сплайс (). Чтобы удалить элемент в позиции 1:

actions.splice(1,1);

Чтобы добавить элемент в позиции 1:

actions.splice(1,0,itemToAdd);
1 голос
/ 13 февраля 2020

Может быть, вы ищете splice , который может удалить любое количество элементов в массиве и вставить любое количество элементов по указанному индексу.

const actions = [
  { 'name' : 'Share', 'icon' : 'fa fa-share-alt library_icon mylibrary-icon-right'},
  {
    'name' : 'Edit',
    'icon' : 'fa fa-pencil-square-o library_icon mylibrary-icon-right'
  },
  {
    'name' : 'Embed',
    'icon' : 'fa fa-link library_icon mylibrary-icon-right'
  },
  {
     'name' : 'Schedule',
     'icon' : 'fa fa-calendar library_icon mylibrary-icon-right'
  }
];


const saved = actions.splice(1,1); // At position 1 (remember it is zero based), remove 1 element
console.log("Test1", actions);
console.log("Removed", saved);
actions.splice(1,0,...saved); // At position 1, remove 0, insert all saved elements
console.log("Test2", actions);

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

const actions = [
  { 'name' : 'Share', 'icon' : 'fa fa-share-alt library_icon mylibrary-icon-right'},
  {
    'name' : 'Edit',
    'icon' : 'fa fa-pencil-square-o library_icon mylibrary-icon-right'
  },
  {
    'name' : 'Embed',
    'icon' : 'fa fa-link library_icon mylibrary-icon-right'
  },
  {
     'name' : 'Schedule',
     'icon' : 'fa fa-calendar library_icon mylibrary-icon-right'
  }
];


const filtered = actions.filter( item => item.name != "Edit");
console.log("Filtered", filtered);
1 голос
/ 13 февраля 2020

Просто обновите index (index start from 0) новым объектом

const actions = [{ 'name' : 'Share', 'icon' : 'fa fa-share-alt library_icon mylibrary-icon-right' },{ 'name' : 'Edit', 'icon' : 'fa fa-pencil-square-o library_icon mylibrary-icon-right' }, { 'name' : 'Embed', 'icon' : 'fa fa-link library_icon mylibrary-icon-right' }, { 'name' : 'Schedule', 'icon' : 'fa fa-calendar library_icon mylibrary-icon-right' } ];


function replace(index,object){
  const array = actions;
  array[index] = object;
  return array
}

console.log(replace(2,{new:'one'}))
0 голосов
/ 13 февраля 2020

Вы можете удалить объект на определенном index оставить это index и добавить на это index позже, вот как. Вот еще о сращивания

var action = [{ 'name' : 'Share',
  'icon' : 'fa fa-share-alt library_icon mylibrary-icon-right'
    },{
    'name' : 'Edit',
    'icon' : 'fa fa-pencil-square-o library_icon mylibrary-icon-right'
  },
  {
    'name' : 'Embed',
    'icon' : 'fa fa-link library_icon mylibrary-icon-right'
  },
  {
     'name' : 'Schedule',
     'icon' : 'fa fa-calendar library_icon mylibrary-icon-right'
  }
];
var idx = -1;
var item = {"foo":"bar"};
// first step to remove element matching by condition
action.forEach(function (el,index){
  if("Edit" == el.name ){
    action.splice(index,1);
    idx=index;
    item = el;
    return ;
   }
})
console.log(`items before addition `,action);
// step 2 is inserting element at deleted index
action.splice(idx, 0, item)

console.log(`items after addition `,action);
0 голосов
/ 13 февраля 2020

Вы можете добавить объект в массив, используя push.

пример:

const actions = [{
    'name': 'Share',
    'icon': 'fa fa-share-alt library_icon mylibrary-icon-right'
  }, {
    'name': 'Edit',
    'icon': 'fa fa-pencil-square-o library_icon mylibrary-icon-right'
  },
  {
    'name': 'Embed',
    'icon': 'fa fa-link library_icon mylibrary-icon-right'
  },
  {
    'name': 'Schedule',
    'icon': 'fa fa-calendar library_icon mylibrary-icon-right'
  }
];

var newObj = {
  name: 'thing',
  icon: 'smiley face'
}

actions.push(newObj)

console.log(actions)

если вы хотите удалить второй объект, а затем добавить его в конце, вы можете сделать это, используя фильтр или сплайс:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

const actions = [{
    'name': 'Share',
    'icon': 'fa fa-share-alt library_icon mylibrary-icon-right'
  }, {
    'name': 'Edit',
    'icon': 'fa fa-pencil-square-o library_icon mylibrary-icon-right'
  },
  {
    'name': 'Embed',
    'icon': 'fa fa-link library_icon mylibrary-icon-right'
  },
  {
    'name': 'Schedule',
    'icon': 'fa fa-calendar library_icon mylibrary-icon-right'
  }
];

var secondObj = actions[1]
actions.push(secondObj) // adds secondObj to end of array
actions.splice(1, 1) // removes one elment from index 1

console.log(actions)
...