如何优雅地检索并从JavaScript对象删除项目



我想使用其键同时删除它。有一种优雅的方法可以实现这一目标吗?

inelegant解决方案

const popItem = (key) => {
  const popped = items[key]
  delete items[key]
  return popped
}

怎么样?

const items = {1: 'one', 2: 'two'}
const popItem = (obj, key) => [obj[key], delete obj[key]][0];
console.log(popItem(items, 2));  // 'two'
console.log(items);              // { 1: 'one; }

jsbin

或者也想从功能中返回新的OBJ:

const items = {1: 'one', 2: 'two'}
const popItem = (obj, key) => [obj[key], [delete obj[key], obj][1]];
const [newObj, item] = popItem(items, 1);
console.log(newObj)  // 'one'
console.log(item)    // { 2: "two" }

jsbin

为什么不尝试不突变?

const popItem = (obj, key) => {
 { [key], ...rest } = obj;
 return { popped: key, newObj: rest };
};

然后您可以这样称呼:

const { popped, newObj } = popItem(obj, key);

最新更新