如何从数组中删除所有元素,仅保留指定值的目标元素
嘿,我来帮你解决这个问题~首先得纠正下你示例里的小问题:你写的array其实是个对象(因为用了键值对),而且里面的data对象有重复的id键——在JavaScript这类语言里,重复的对象键会被最后一个覆盖,所以实际data最终只会剩下id: '3',这显然不是你想要的。我猜你可能是把data的结构写错了,下面我分两种最可能的情况给你解决方案:
情况1:data是数组(更符合常规业务场景的结构)
如果你的原始数据是下面这样(data是包含多个对象的数组):
const key = '2'; const originalObj = { data1: 'foo', data: [ { id: '1' }, { id: '2' }, { id: '3' } ] };
想要保留id等于指定值的那条数据,你可以用数组的filter方法过滤,或者用find直接拿到单个匹配项:
方案A:保留为数组形式
const result = { ...originalObj, // 保留原对象的其他属性(比如data1) data: originalObj.data.filter(item => item.id === key) }; // 结果:{ data1: 'foo', data: [ { id: '2' } ] }
方案B:转为单个对象(和你期望的结果一致)
const result = { ...originalObj, data: originalObj.data.find(item => item.id === key) || {} // 找不到时返回空对象避免报错 }; // 结果:{ data1: 'foo', data: { id: '2' } }
情况2:data是无重复键的对象
如果你的data是一个以id为键的对象(比如下面这样):
const key = '2'; const originalObj = { data1: 'foo', data: { '1': '对应id1的数据', '2': '对应id2的数据', '3': '对应id3的数据' } };
想要只保留指定key对应的键值对,直接构造新对象即可:
const result = { ...originalObj, data: { [key]: originalObj.data[key] } // 仅保留指定key的条目 }; // 结果:{ data1: 'foo', data: { '2': '对应id2的数据' } }
你可以根据自己实际的数据结构选择对应的方案,如果还有其他细节问题,随时说~
内容的提问来源于stack exchange,提问作者Jofeean Ogario
相关产品推荐
相关产品推荐

