当对象键javascript中的数组字符串匹配时删除对象
Posted
技术标签:
【中文标题】当对象键javascript中的数组字符串匹配时删除对象【英文标题】:Remove the object when the array string match in object key javascript 【发布时间】:2019-12-05 19:38:55 【问题描述】:我正在使用其他代码,试图不破坏应用程序中的其他功能,但基本上我需要在条件匹配时删除对象。
我之前问的问题会删除对象,但不会在不同的代码库中,所以希望有人能给我一些想法。
感谢您的帮助!
const data =
'123':
'name': 'Part 1',
'size': '20',
'qty' : '50'
,
'5678' :
'name': 'Part 2',
'size': '15',
'qty' : '60'
,
'9810' :
'name': 'Part 2',
'size': '15',
'qty' : '120'
,
// my code I tried work with:
const getValue = Object.keys(data).reduce((acc,id)=>
const condition = ['9810','5678'];
if(acc[key])
// remove the object if the key match
return !acc.includes(key[id])
else
// if not match just return the original object
return acc
,)
【问题讨论】:
输出应该是什么? 另外,它是Object.keys
而不是Object.key
。
【参考方案1】:
如果你想创建一个删除了属性的新对象(这可能是个好主意),你应该将键处的值分配给累加器,你可以使用Object.entries
来获取键和值立即在reduce
回调中。您还可以使用 Set 而不是数组来降低计算复杂度(Set.has
是 O(1)
,而 Array.includes
是 O(n)
):
const data =
'123':
'name': 'Part 1',
'size': '20',
'qty': '50'
,
'5678':
'name': 'Part 2',
'size': '15',
'qty': '60'
,
'9810':
'name': 'Part 2',
'size': '15',
'qty': '120'
,
const condition = new Set(['9810', '5678']);
const filteredData = Object.entries(data).reduce((acc, [key, val]) =>
if (!condition.has(key))
acc[key] = val;
return acc;
, );
console.log(filteredData);
如果您想从现有 data
对象中实际删除子对象(改变您已有的data
),然后使用forEach
进行迭代并使用delete
删除属性:
const data =
'123':
'name': 'Part 1',
'size': '20',
'qty': '50'
,
'5678':
'name': 'Part 2',
'size': '15',
'qty': '60'
,
'9810':
'name': 'Part 2',
'size': '15',
'qty': '120'
,
const condition = new Set(['9810', '5678']);
Object.keys(data).forEach((key) =>
if (condition.has(key))
delete data[key];
);
console.log(data);
【讨论】:
非常感谢您的快速回复。是否可以在 reduce 函数中创建 Key 条件?因为以前的开发人员使用该键从 reduce 函数中的其他条件生成一个数组。我搬不出来谢谢! 在每次迭代时创建数组会导致大量不必要的开销,但如果您愿意,可以将其放入回调中。 (如果每次迭代都创建condition
数组,不要使用Set,因为将数组转换为Set本身就是O(n)
操作)【参考方案2】:
要删除键数组中包含的子对象中的所有对象,请使用forEach
和delete
。
const data = '123':'name':'Part 1','size':'20','qty':'50','5678' :'name':'Part 2','size':'15','qty':'60','9810' :'name':'Part 2','size':'15','qty':'120';
const condition = ["5678", "9810"];
condition.forEach(key => delete data[key]);
console.log(data);
.as-console-wrapper max-height: 100% !important; top: auto;
或者如果你想反过来 - 保留只包含在数组中的键:
const data = '123':'name':'Part 1','size':'20','qty':'50','5678' :'name':'Part 2','size':'15','qty':'60','9810' :'name':'Part 2','size':'15','qty':'120';
const condition = ["5678", "9810"];
Object.keys(data).forEach(key => !condition.includes(key) ? delete data[key] : key);
console.log(data);
.as-console-wrapper max-height: 100% !important; top: auto;
【讨论】:
非常感谢您的快速回复!让我试试这个!以上是关于当对象键javascript中的数组字符串匹配时删除对象的主要内容,如果未能解决你的问题,请参考以下文章