我在我的化简Map / Associative数组中使用它来通过字符串ID存储对象。
当我需要Map中的新项目时,我正在使用此构造
rows: { ...state.rows, [row.id]: row }
当我需要通过ID删除项目表单映射时,我正在使用它。
const { [rowId]: deleted, ...rows } = state.rows;
与变量行相比,我缺少名称为rowId
的map和property。
我想知道如果数组中有多个ID,并且需要通过...
运算符并进行销毁将其删除,该怎么办。
const contentIds = ['id1','id2','id3']
// something like ???
const {...[ids], ...rows}
是的,我可以为此编写lamda或使用省略lodash。 但是,只要有可能,就很有趣。
非常感谢
答案 0 :(得分:3)
您可以使用对象减少按键。
var object = { id: 1, id1: 2, id2: 3 },
contentIds = ['id1', 'id2', 'id3'],
result = contentIds.reduce((o, k) => ({ [k]: _, ...r } = o, r), object);
console.log(result);
答案 1 :(得分:0)
const myObj = { id1: 'test', id2: 'test', id3: 'test' }
const idsToFilter = ['id1', 'id2']
const { id1, id2, ...filtered } = myObj
console.log(filtered)
但是,除非您知道要从对象中过滤的确切ID,否则您将无法通过编程方式进行操作。如果您想基于一组ID来执行此操作,则需要使用类似的
function filterObjectByKeys (object, keysToFilter) {
return Object.keys(object).reduce((accum, key) => {
if (!keysToFilter.includes(key)) {
return { ...accum, [key]: object[key] }
} else {
return accum
}
}, {})
}
答案 2 :(得分:0)
如果我在数组中有多个ID,而我却在徘徊,我该怎么办 需要通过
...
运算符删除它们并进行销毁。
不,您不能这样做,您可能会与rest
和spread
语法感到困惑,赋值左侧的...
是rest
语法不是spread
并且rest
语法要求...
后跟变量名,您要尝试的是syntaxError
const object = {a:1,b:2,c:3}
const a = ['a','b']
const {...[a], ...rows} = object
console.log(rows)
更多,您不能在,
之后使用rest
中间逗号,即使这样做
let {...a, ...rows } = obj
它仍然无效
const object = {a:1,b:2,c:3}
const {...a, ...rows} = object
console.log(rows)
您可以使用@nina建议的解决方案,也可以创建对象的副本并遍历contentIds
并从copyObj中删除键/值以获得所需的值
const object = { id: 1, id1: 2, id2: 3 };
const contentIds = ['id1', 'id2', 'id3'];
const objCopy = object
contentIds.forEach(key=>{
delete objCopy[key]
})
console.log(objCopy);