удалить свойство с последовательным индексом в объекте - PullRequest
0 голосов
/ 19 марта 2019

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

item = {
  0: 'A',
  1: 'B',
  2: 'C',
  3: 'D'
}

Например, если я хочу удалить «1» из объекта элемента и после того, как он был удален, «2» и «3» должны автоматическиминус 1 и стать объектом ниже:

item = {
  0: 'A',
  1: 'C',
  2: 'D'
}

Возможно ли достичь этого с помощью объекта рядом с массивом?

Ответы [ 5 ]

5 голосов
/ 19 марта 2019

Опустить ключ, который вам не нужен, преобразовать в массив, используя Object.values(), а затем преобразовать обратно в объект, расширив его до пустого объекта:

const item = {
  0: 'A',
  1: 'B',
  2: 'C',
  3: 'D'
}

const result = { ...Object.values(_.omit(item, 1)) }

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

Или вы можете создать функцию, которая использует остальные параметры:

const fn = (key, { [key]: _, ...rest }) => ({ ...Object.values(rest) })

const item = {
  0: 'A',
  1: 'B',
  2: 'C',
  3: 'D'
}

const result = fn(1, item)

console.log(result)
0 голосов
/ 19 марта 2019

Или же вы можете использовать фильтр Лодаша непосредственно на объекте (на самом деле вы можете), чтобы удалить ненужные элементы, а затем создать массив за один шаг, а затем просто использовать оператор растяжения объекта для построения полученного объекта .

Пример:

let o = {"0":"A","1":"B","2":"C","3":"D"},
    res = {..._.filter(o, (v, k) => k!=1)};
    
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
0 голосов
/ 19 марта 2019

Вот еще одно решение, если вы не хотите полагаться на сторонние плагины.Lodash также довольно тяжелая библиотека.

var deleteObj = ({data, index}) => {
    var objSize = Object.keys(data).length
    if (index > objSize -1) return data
    var count = index;
    delete data[count];
    count = count+1;
   while (count < objSize){
      data[count-1] = data[count];
      count = count+1;
  }
  delete data[count-1];
  return data;
}

deleteObj({data: {0: "A", 1: "B", 2: "C", 3: "D", 4: "E", 5: "F"}, index: 0});
0 голосов
/ 19 марта 2019

Вы можете использовать массив для удаления и повторной индексации.

let item = {
  0: 'A',
  1: 'B',
  2: 'C',
  3: 'D'
};

// get values as an array
let arr = Object.values(item);

// remove element at index 1
arr.splice(1, 1);

// extract array to an object
item = {
  ...arr
};

console.log(item);
0 голосов
/ 19 марта 2019

Использовать оператор удаления

delete item["1"];
...