删除对象中具有顺序索引的属性

时间:2019-03-19 05:13:38

标签: javascript lodash

我有一个如下对象:

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

例如,如果我想从项目对象中删除“ 1”,并且在删除之后,“ 2”和“ 3”应自动减1并成为下面的对象:

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

除了使用数组外,是否还可以通过对象来实现?

5 个答案:

答案 0 :(得分:5)

省略不需要的键,使用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>

或者您可以创建一个使用rest参数的函数:

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)

答案 1 :(得分:0)

使用删除语句

delete item["1"];

答案 2 :(得分:0)

您可以使用数组进行删除和重新索引。

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);

答案 3 :(得分:0)

如果您不想依赖第三方插件,这里还有另一个解决方案。 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});

答案 4 :(得分:0)

否则,您可以直接在对象上使用lodash's filter(实际上可以)删除不需要的项目,然后一步生成一个数组,然后仅使用对象散布运算符重新生成结果对象。

示例:

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>