如何在javascript中过滤数组内的嵌套对象
Posted
技术标签:
【中文标题】如何在javascript中过滤数组内的嵌套对象【英文标题】:how to filter an nested objects inside an array in javascript 【发布时间】:2021-05-09 22:44:13 【问题描述】:我在数组中有以下嵌套对象,我想过滤结果以返回特定项目的 id。
const data = [
0: id: 1, country: "SA", address: "IOXX",
1: id:2, country: "SAP", name: "N", address: "IOP",
2: id:3, country: "S", name: "NO", address: "I",
3: id:4, country: "SXX", name: "NOI", address: "INDIA",
]
我尝试的解决方案是返回 null,因为我假定嵌套对象结构
var dataREsult = data.filter(function(el)
return el.id == 4;
);
P.S:上面的数据结构来自我正在使用的后端。
我是 javascript 的初学者。任何帮助将不胜感激。
【问题讨论】:
为什么你的数据是这样的结构? @adiga 它是后端的 api 响应... 作为一个没有什么意义的数据结构。它是不必要的嵌套,并且每个内部对象都存在于不一致的键(第一个 0,第二个 1 等)上,因此您必须使用Object.values()
来获取它。如果可能的话,规范化结构。
@Mitya 有什么可以用代码展示的例子吗?
如果可以更改数据,请更改您的服务器代码。这太荒谬了。当然你可以做return Object.values(el)[0].id === 4
。但是,使用该结构很难访问和更新状态。
【参考方案1】:
在Array.filter()
回调中使用Object.values()
。
const data = [
0: id: 1, country: "SA", address: "IOXX",
1: id:2, country: "SAP", name: "N", address: "IOP",
2: id:3, country: "S", name: "NO", address: "I",
3: id:4, country: "SXX", name: "NOI", address: "INDIA",
]
const result = data.filter(el => Object.values(el)[0].id === 4);
for(var i=data.length-1; i>=0; i--)
if(Object.values(data[i])[0].id === 4)
data.splice(i, 1)
console.log(data);
【讨论】:
感谢 sn-p,如果您以4
为例,那么只返回 id
值的方法是什么。我打算用它创建一个函数。
同理,你可以把它做成一个函数然后返回。
@JohnD 如果您按id
过滤,为什么要返回id
值?
@adiga 在本例中,我试图删除带有id = 4
的项目。我可能以错误的方式接近它,但这是最终目标。
我更新了我的答案,你可以使用array.forEach,并使用array.splice() 删除该项目。 @JohnD以上是关于如何在javascript中过滤数组内的嵌套对象的主要内容,如果未能解决你的问题,请参考以下文章