我有一个如下对象:
item = {
0: 'A',
1: 'B',
2: 'C',
3: 'D'
}
例如,如果我想从项目对象中删除“ 1”,并且在删除之后,“ 2”和“ 3”应自动减1并成为下面的对象:
item = {
0: 'A',
1: 'C',
2: 'D'
}
除了使用数组外,是否还可以通过对象来实现?
答案 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>